MySQL:入門

1、前言

MySQL :是用於管理數據的軟件javascript

MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。html

  分爲服務端和客戶端(也是基於C/S架構的程序)java

服務端:mysql

  • socket服務端
  • 本地文件操做
  • 解析指令(SQL語句)

客戶端:sql

  • socket客戶端
  • 發送指令
  • 解析指令(SQL語句)

須要掌握

  • 安裝服務端和客戶端     https://www.mysql.com
  • 鏈接
  • 學習SQL語句規則,指示服務端作相應的操做

其餘瞭解

相似軟件數據庫

  • 關係型數據庫:SQLLITE,DB2,ORACLE,ACCESS,SQL SERVER,MYSQL
  • 非關係型數據庫:MONGODB,REDIS  等等

2、MySQL安裝

在LINUX上可RPM或者yum install 。。。便可安裝上windows

在windows上:服務器

一、可執行文件

MySQL Installer   連接地址:mysql執行文件session

下載完成以後,下一步  下一步便可  具體可訪問此地址查看架構

 

二、壓縮包(zip)形式

Windows (x86, 64-bit), ZIP Archive  訪問地址:官網地址

 

壓縮包形式好處是能夠放置任意目錄

下載完成以後,好比放到windows上的D盤

一、解壓以後 如上圖

二、初始化工做

  以管理的身份運行CMD  DOS窗口

例如  路徑爲 D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64  

就須要在dos窗口 敲 D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64\bin\mysqld --initialize-insecure   此時便可完成初始化操做

  默認生成一個root用戶 密碼爲空

三、啓動服務端

 D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64\bin\mysqld   在dos窗口執行此行  會出現socket (accept,recv)阻塞  或者 while 循環 input 的效果

四、客戶端鏈接

 D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64\bin\mysql -u root -p   密碼爲空  回車便可進入

  發送  show databases ;  指令

 

三、 環境變量的配置

 打開計算機屬性高級系統設置環境變量系統變量框下的path項點擊編輯,將指針移到開頭加上 ;    ,而後在分號前面輸入mysql的bin目錄路徑便可。

這樣每次在dos窗口就不須要加路徑這麼長的前綴了  只須要輸入   mysql -u root -p  等等  就好了

可是系統一關機再開機以後 mysql這個服務是沒有自啓動的,每次重啓機器後 都須要 在管理員dos窗口運行一次  mysqld

這樣每次都須要手動執行一遍mysqld  太麻煩了  這裏就能夠製做成windows服務

四、製做windows服務

 

 

可在圖形中點擊啓動按鍵

也可在dos(管理員)輸入   net start MySQL   啓動

            net stop MySQL   中止

 

3、MySQL軟件管理

一、在windows下指定配置文件

ps:配置文件中的註釋能夠有中文,可是配置項中不能出現中文

#在mysql的解壓目錄下,新建my.ini,而後配置
#1. 在執行mysqld命令時,下列配置會生效,即mysql服務啓動時生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1


#解壓的目錄
basedir=E:\mysql-5.7.19-winx64
#data目錄
datadir=E:\my_data #在mysqld --initialize時,就會將初始數據存入此處指定的目錄,在初始化以後,啓動mysql時,就會去這個目錄裏找數據



#2. 針對客戶端命令的全局配置,當mysql客戶端命令執行時,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

#3. 只針對mysql這個客戶端的配置,2中的是全局配置,而此處的則是隻針對mysql這個命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=egon
password=4573


#!!!若是沒有[mysql],則用戶在執行mysql命令時的配置以[client]爲準
my.ini

二、統一字符集

#1. 修改配置文件
[mysqld]
default-character-set=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

#mysql5.5以上:修改方式有所改動
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

#2. 重啓服務
#3. 查看修改結果:
\s
show variables like '%char%';

 

4、鏈接SQL

數據庫的結構大體也分爲

  文件夾【數據庫】

    文件【表】

     數據行【行】

這樣的結構

SQL語句 歸納即爲(CURD)增改查刪

默認的用戶  超級管理員 :  root   

初始狀態下,管理員root,密碼爲空,默認只容許從本機登陸localhost
設置密碼
mysqladmin -uroot password "123"        設置初始密碼 因爲原密碼爲空,所以-p能夠不用
mysqladmin -uroot -p"123" password "456"        修改mysql密碼,由於已經有密碼了,因此必須輸入原密碼才能設置新密碼
設置密碼
show databases;
use 數據庫名稱;
    
show tables;
        
select * from 表名;
        
select name,age,id from 表名;
        
mysql數據庫user表
use mysql;
select user,host from user;

用戶管理

建立用戶
    create user '用戶名'@'IP地址' identified by '密碼';
刪除用戶
    drop user '用戶名'@'IP地址';
修改用戶
    rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址';;
修改密碼
    set password for '用戶名'@'IP地址' = Password('新密碼')
  
PS:用戶權限相關數據保存在mysql數據庫的user表中,因此也能夠直接對其進行操做(不建議)

 

建立用戶和受權

   建立用戶:
              create user '用戶名'@'IP地址' identified by '密碼';
              create user '用戶名'@'192.168.1.%' identified by '密碼';
              create user '用戶名'@'%(表明任意)' identified by '密碼';
      

受權: grant select,insert,update on 庫名.表名 to
'用戶名'@'%'; grant all privileges(表明除受權外的全部權限) on db.表名 to '用戶名'@'%'; 解除權限 revoke all privileges on db.表名 from '用戶名'@'%'; 實際狀況(DBA: 用戶名密碼 會給對應表 或 庫 的相應權限用戶)show grants for'用戶'@'IP地址'-- 查看權限
            all privileges  除grant外的全部權限
            select          僅查權限
            select,insert   查和插入權限
            ...
            usage                   無訪問權限
            alter                   使用alter table
            alter routine           使用alter procedure和drop procedure
            create                  使用create table
            create routine          使用create procedure
            create temporary tables 使用create temporary tables
            create user             使用create user、drop user、rename user和revoke  all privileges
            create view             使用create view
            delete                  使用delete
            drop                    使用drop table
            execute                 使用call和存儲過程
            file                    使用select into outfile 和 load data infile
            grant option            使用grant 和 revoke
            index                   使用index
            insert                  使用insert
            lock tables             使用lock table
            process                 使用show full processlist
            select                  使用select
            show databases          使用show databases
            show view               使用show view
            update                  使用update
            reload                  使用flush
            shutdown                使用mysqladmin shutdown(關閉MySQL)
            super                   􏱂􏰈使用change master、kill、logs、purge、master和set global。還容許mysqladmin􏵗􏵘􏲊􏲋調試登錄
            replication client      服務器位置的訪問
            replication slave       由複製從屬使用
權限相關
 對於目標數據庫以及內部其餘:
            數據庫名.*           數據庫中的全部
            數據庫名.表          指定數據庫中的某張表
            數據庫名.存儲過程     指定數據庫中的存儲過程
            *.*                全部數據庫
對於數據庫
            用戶名@IP地址         用戶只能在該IP下才能訪問
            用戶名@192.168.1.%   用戶只能在該IP段下才能訪問(通配符%表示任意)
            用戶名@%             用戶能夠在任意IP下訪問(默認IP地址爲%)
對於IP地址

 

5、數據庫操做

        create database db1; #建立庫
create database db1 default charset utf8;#建立庫設置字符集 *****
show databases; #查看庫
drop database db1; #刪除庫
alter database db1 charset utf8; #改字符集

 

6、數據表操做

一、建立表

create table 表名(
    列名  類型  是否能夠爲空,
    列名  類型  是否能夠爲空
)engine=innodb default charset=utf8;  #引擎innodb  字符集
        是否可空,null表示空,非字符串
            not null    - 不可空
            null        - 可空
是否爲空
        默認值,建立列時能夠指定默認值,當插入數據時若是未主動設置,則自動添加默認值
            create table tb1(
                id int not null defalut 0,
                num int not null
            )
默認值default
       自增,若是爲某列設置自增列,插入數據時無需設置此列,默認將自增(表中只能有一個自增列)
            create table tb1(
                nid int not null auto_increment primary key,
                num int null
            )
            或
            create table tb1(
                nid int not null auto_increment,
                num int null,
                index(nid)
            )
            注意:1、對於自增列,必須是索引(含主鍵)。
                 2、對於自增能夠設置步長和起始值
                     show session variables like 'auto_inc%';
                     set session auto_increment_increment=2;
                     set session auto_increment_offset=10;

                     shwo global  variables like 'auto_inc%';
                     set global auto_increment_increment=2;
                     set global auto_increment_offset=10;
自增
        主鍵,一種特殊的惟一索引,不容許有空值,若是主鍵使用單個列,則它的值必須惟一,若是是多列,則其組合必須惟一。
            create table tb1(
                nid int not null auto_increment primary key,
                num int null
            )
            或
            create table tb1(
                nid int not null,
                num int not null,
                primary key(nid,num)
            )
主鍵
        外鍵,一個特殊的索引,只能是指定內容
            creat table color(
                nid int not null primary key,
                name char(16) not null
            )

            create table fruit(
                nid int not null primary key,
                smt char(32) null ,
                color_id int not null,
                constraint fk_cc foreign key (color_id) references color(nid)
            )
外鍵

注意點:

引擎 innodb    支持事務,原子性操做
   myisam   查詢速度快 不支持事務

auto_increment  表示:自增 

修改自增ID起始值:

alter table users AUTO_INCREMENT=123456;

primary key 主鍵 表示: 約束(不能重複且不能爲空); 加速查找

二、刪除表

drop table 表名

三、修改表

1. 修改表名
      ALTER TABLE 表名 
                          RENAME 新表名;

2. 增長字段
      ALTER TABLE 表名
                          ADD 字段名  數據類型 [完整性約束條件…],
                          ADD 字段名  數據類型 [完整性約束條件…];
      ALTER TABLE 表名
                          ADD 字段名  數據類型 [完整性約束條件…]  FIRST;
      ALTER TABLE 表名
                          ADD 字段名  數據類型 [完整性約束條件…]  AFTER 字段名;
                            
3. 刪除字段
      ALTER TABLE 表名 
                          DROP 字段名;

4. 修改字段
      ALTER TABLE 表名 
                          MODIFY  字段名 數據類型 [完整性約束條件…];
      ALTER TABLE 表名 
                          CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…];
      ALTER TABLE 表名 
                          CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];
  
添加主鍵:
        alter table 表名 add primary key(列名);
刪除主鍵:
        alter table 表名 drop primary key;
        alter table 表名  modify  列名 int, drop primary key;
  
添加外鍵:alter table 從表 add constraint 外鍵名稱(形如:FK_從表_主表) foreign key 從表(外鍵字段) references 主表(主鍵字段);
刪除外鍵:alter table 表名 drop foreign key 外鍵名稱
  
修改默認值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
刪除默認值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

 

示例:
1. 修改存儲引擎
mysql> alter table service 
    -> engine=innodb;

2. 添加字段
mysql> alter table student10
    -> add name varchar(20) not null,
    -> add age int(3) not null default 22;
    
mysql> alter table student10
    -> add stu_num varchar(10) not null after name;                //添加name字段以後

mysql> alter table student10                        
    -> add sex enum('male','female') default 'male' first;          //添加到最前面

3. 刪除字段
mysql> alter table student10
    -> drop sex;

mysql> alter table service
    -> drop mac;

4. 修改字段類型modify
mysql> alter table student10
    -> modify age int(3);
mysql> alter table student10
    -> modify id int(11) not null primary key auto_increment;    //修改成主鍵

5. 增長約束(針對已有的主鍵增長auto_increment)
mysql> alter table student10 modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined

mysql> alter table student10 modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

6. 對已經存在的表增長複合主鍵
mysql> alter table service2
    -> add primary key(host_ip,port);        

7. 增長主鍵
mysql> alter table student1
    -> modify name varchar(10) not null primary key;

8. 增長主鍵和自動增加
mysql> alter table student1
    -> modify id int not null primary key auto_increment;

9. 刪除主鍵
a. 刪除自增約束
mysql> alter table student10 modify id int(11) not null; 

b. 刪除主鍵
mysql> alter table student10                                 
    -> drop primary key;
示例

 

複製表結構+記錄 (key不會複製: 主鍵、外鍵和索引)
mysql> create table new_service select * from service;

只複製表結構
mysql> select * from service where 1=2;        //條件爲假,查不到任何記錄
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2;  
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create table t4 like employees;
複製表

四、查詢

show tables ;  查全部表 
desc  tablename; 查看錶結構
desc  庫名.表名;
show create table 表名;

7、基本數據類型(重要)

MySQL的數據類型大體分爲:數值、時間和字符串

        bit[(M)]
            二進制位(101001),m表示二進制位的長度(1-64),默認m=1

        tinyint[(m)] [unsigned] [zerofill]

            小整數,數據類型用於保存一些範圍的整數數值範圍:
            有符號:
                -128127.
            無符號:
                0255

            特別的: MySQL中無布爾值,使用tinyint(1)構造。

        int[(m)][unsigned][zerofill]

            整數,數據類型用於保存一些範圍的整數數值範圍:
                有符號:
                    -21474836482147483647
                無符號:
                    04294967295

            特別的:整數類型中的m僅用於顯示,對存儲範圍無限制。例如: int(5),當插入數據2時,select 時數據顯示爲: 00002

        bigint[(m)][unsigned][zerofill]
            大整數,數據類型用於保存一些範圍的整數數值範圍:
                有符號:
                    -92233720368547758089223372036854775807
                無符號:
                    018446744073709551615

        decimal[(m[,d])] [unsigned] [zerofill]
            準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值爲65,d最大值爲30。

            特別的:對於精確數值計算時須要用此類型
                   decaimal可以存儲精確值的緣由在於其內部按照字符串存儲。

        FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
            單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。
                無符號:
                    -3.402823466E+38 to -1.175494351E-38,
                    0
                    1.175494351E-38 to 3.402823466E+38
                有符號:
                    0
                    1.175494351E-38 to 3.402823466E+38

            **** 數值越大,越不許確 ****

        DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
            雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。

                無符號:
                    -1.7976931348623157E+308 to -2.2250738585072014E-308
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
                有符號:
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
            **** 數值越大,越不許確 ****


        char (m)
            char數據類型用於表示固定長度的字符串,能夠包含最多達255個字符。其中m表明字符串的長度。
            PS: 即便數據小於m長度,也會佔用m長度
        varchar(m)
            varchars數據類型用於變長的字符串,能夠包含最多達255個字符。其中m表明該數據類型所容許保存的字符串的最大長度,只要長度小於該最大值的字符串均可以被保存在該數據類型中。

            注:雖然varchar使用起來較爲靈活,可是從整個系統的性能角度來講,char數據類型的處理速度更快,有時甚至能夠超出varchar處理速度的50%。所以,用戶在設計數據庫時應當綜合考慮各方面的因素,以求達到最佳的平衡

        text
            text數據類型用於保存變長的大字符串,能夠組多到65535 (2**161)個字符。

        mediumtext
            A TEXT column with a maximum length of 16,777,215 (2**241) characters.

        longtext
            A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**321) characters.


        enum
            枚舉類型,
            An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
            示例:
                CREATE TABLE shirts (
                    name VARCHAR(40),
                    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                );
                INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');

        set
            集合類型
            A SET column can have a maximum of 64 distinct members.
            示例:
                CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
                INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

        TIME
            HH:MM:SS('-838:59:59'/'838:59:59'YEAR
            YYYY(1901/2155DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
View Code

 詳細參考: 數據類型介紹

 

8、數據行(表內容)操做

一、增長(插入)

insert into 表 (列名,列名...) values (值,值,值...)
insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from

二、刪除

delete fromdelete fromwhere id=1 and name='xxx'

三、修改

updateset name = 'xxx' where id>1  #where 後跟的是條件

四、查詢

select * fromselect * fromwhere id > 1
select uid,name,gender as gg fromwhere id > 1

五、清空表

delete from 表名        下次再插入數據 自增鍵從上次表數據id 接着寫

truncate table 表名    下次再插入數據 id從1開始

9、練習

文件夾:庫
    增
        create database db1 charset utf8;
    刪
        drop database db2;
    改
        alter database db2 charset gbk;
    查
        show create database db2;
        
文件:表
        須要先進入庫
        use 庫名   (切換文件夾)
    增
        create table tb1(
            id int auto_increment primary key,
            name varchar(10),
            sex char(6)
        )engine=innodb charset=utf8;
    
    刪
        drop table tb1;
    
    改
        alter table db2.tb1 modify name char(10);
    
    查
        desc tb1;
        desc db2.tb1;
        show tables;

文件一行行內容(表內容)
    增
        insert into db2.tb1(name,sex) values
        ('mogu','male'),
        ('小明','female'),
        ('小火柴','male')
        ;
    
    
    刪
        delete from db2.tb1 where id >(<,=,!=)num;
    
    改
        
        update db2.tb1 set name='mogugu' where id =3;    
    查
        select * from db2.tb1 ;
        索引技術 減小IO  優化查詢


    清空表
        delete from db2.tb1;    自增id 不清空
        truncate db2.tb1;       自增id 也清空
View Code

 10、SQL進階

sql進階連接:http://www.javashuo.com/article/p-tixlapgn-w.html

相關文章
相關標籤/搜索