MySQL-庫表操做詳述

1、庫操做

        建立庫
             create database 庫名(charset utf8 對庫的編碼進行設置,不寫就用默認值)
             庫名能夠由字母、數字、下劃線、特殊字符,要區分大小寫,惟一性,不能使用關鍵字,不能用數字開頭,最長128位

查看數據庫
       注意:在cmd中輸入指令是不區分大小寫的        show databases; #這查看的是全部的庫        show create database db1; #這是查看指定的庫        select database(); #這是查看當前的庫
選擇數據庫        USE 數據庫名 #至關於在電腦上雙擊文件夾,進入文件夾
刪除數據庫        DROP DATABASE 數據庫名;
修改數據庫        alter database db1 charset utf8; #只能修改庫的編碼格式 2、表操做   一、存儲引擎         存儲引擎就是表的類型,MySQL中根據不一樣的存儲引擎會有不一樣的處理機制,存儲引擎的概念是MySQL裏面纔有的。     1.一、MySQL的一個整個工做流程

 

    1.二、存儲引擎的分類

                   在cmd中輸入show engines能夠查看全部的引擎,輸入show variables like 'storage_engine%'能夠查看當前使用的引擎。

 

   MyISAM引擎特色:
1.不支持事務 事務是指邏輯上的一組操做,組成這組操做的各個單元,要麼全成功要麼全失敗。
2.表級鎖定 數據更新時鎖定整個表:其鎖定機制是表級鎖定,也就是對錶中的一個數據進行操做都會將這個表鎖定,其餘人不能操做這個表,
      這雖然可讓鎖定的實現成本很小可是也同時大大下降了其併發性能。
     3.讀寫互相阻塞 不只會在寫入的時候阻塞讀取,MyISAM還會再讀取的時候阻塞寫入,但讀自己並不會阻塞另外的讀。
4.只會緩存索引 MyISAM能夠經過key_buffer_size的值來提升緩存索引,以大大提升訪問性能減小磁盤IO,可是這個緩存區只會緩存索引,而不會緩存數據。
5.讀取速度較快 佔用資源相對較少
6.不支持外鍵約束,但只是全文索引
7.MyISAM引擎是MySQL5.5版本以前的默認引擎,是對最初的ISAM引擎優化的產物。
     單一對數據庫的操做可使用MyISAM,就是儘可能純度、純寫 InnoDB引擎
     介紹:InnoDB引擎是MySQL數據庫的另外一個重要的存儲引擎,正稱爲目前MySQL AB所發行新版的標準,被包含在全部二進制安裝包裏。
和其餘的存儲引擎相比,InnoDB引擎的優勢是支持兼容ACID的事務(相似於PostGreSQL),以及參數完整性(即對外鍵的支持)。
Oracle公司與2005年10月收購了Innobase。Innobase採用雙認證受權。它使用GNU發行,也容許其餘想將InnoDB結合到商業軟件的團體得到受權。
InnoDB引擎特色:
        1.支持事務:支持4個事務隔離界別,支持多版本讀。         2.行級鎖定(更新時通常是鎖定當前行):經過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響。         3.讀寫阻塞與事務隔離級別相關(有多個級別,這就不介紹啦~)。         4.具體很是高效的緩存特性:能緩存索引,也能緩存數據。         5.整個表和主鍵與Cluster方式存儲,組成一顆平衡樹。(瞭解)         6.全部SecondaryIndex都會保存主鍵信息。(瞭解)         7.支持分區,表空間,相似oracle數據庫。         8.支持外鍵約束,不支持全文索引(5.5以前),之後的都支持了。         9.和MyISAM引擎比較,InnoDB對硬件資源要求仍是比較高的。
        小結:三個重要功能:Supports transactions,row-level locking,and foreign keys Memory引擎:把數據放在內存中 BLACKHOLE引擎:黑洞引擎,數據放進去就消失     
       1.三、存儲引擎的使用          create table 表名(id int)engine=InnoDB 在建立表的時候能夠指定引擎   二、建立表     #語法:         create table 表名(字段名1 類型[(寬度) 約束條件],字段名2 類型[(寬度) 約束條件],字段名3 類型[(寬度) 約束條件]);     
    #注意:
    1. 在同一張表中,字段名是不能相同         2. 寬度和約束條件可選、非必須,寬度指的就是字段長度約束,例如:char(10)裏面的10         3. 字段名和類型是必須的          

          show tables; #這是查看當前庫下的全部表           describe 表名; #也能夠寫成desc 表名,這是查看錶的結構           insert into 表名 values(填對應的數據); #這是向表裏面插入數據           select 表名(字段)from 表名; #這是查看錶中某字段的全部數據           select * from 表名; #這是查看錶中全部字段的全部數據   三、MySQL的基礎數據類型    3.一、整數類型:tinyint,smallint,mediumint,int,bigint             tinyint[(m)] [unsigned] [zerofill]
    小整數,數據類型用於保存一些範圍的整數數值範圍:2**8 有符號:-128 ~ 127 無符號:0~ 255 PS: MySQL中無布爾值,使用tinyint(1)構造。
           int[(m)][unsigned][zerofill]     整數,數據類型用於保存一些範圍的整數數值範圍:2**32     有符號:-2147483648 ~ 2147483647     無符號:0~ 4294967295
           bigint[(m)][unsigned][zerofill]    大整數,數據類型用於保存一些範圍的整數數值範圍: 2**64     有符號: -9223372036854775808 ~ 9223372036854775807     無符號:0 ~ 18446744073709551615
           注意:對於整型來講,數據類型後面的寬度並非存儲長度限度,而是顯示長度限制      3.二、浮點型:           1.FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]           定義:單精度浮點數(非準確小數值),m是整數部分總個數,d是小數點後個數。m最大值爲255,d最大值爲30,
             例如:float(255,30]
          有符號: -3.402823466E+38 to -1.175494351E-38,           1.175494351E-38 to 3.402823466E+38
          無符號: 1.175494351E-38 to 3.402823466E+38           精確度: **** 隨着小數的增多,精度變得不許確 ****
          2.DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]           定義:雙精度浮點數(非準確小數值),m是整數部分總個數,d是小數點後個數。m最大值也爲255,d最大值也爲30
          有符號: -1.7976931348623157E+308 to -2.2250738585072014E-308           2.2250738585072014E-308 to 1.7976931348623157E+308
          無符號: 2.2250738585072014E-308 to 1.7976931348623157E+308           精確度:****隨着小數的增多,精度比float要高,但也會變得不許確 ***
         3.decimal[(m[,d])] [unsigned] [zerofill]           定義:準確的小數值,m是整數部分總個數(負號不算),d是小數點後個數。 m最大值爲65,d最大值爲30。
                比float和double的整數個數少,可是小數位數都是30位
          精確度:**** 隨着小數的增多,精度始終準確 ****           對於精確數值計算時須要用此類型,decimal可以存儲精確值的緣由在於其內部按照字符串存儲。             精度從高到低:decimal、double、float
            decimal精度高,可是整數位數少,float和double精度低,可是整數位數多,float已經知足絕大多數的場景了,可是什麼導彈、航線等要求精度很是高,
            因此仍是須要按照業務場景自行選擇,若是又要精度高又要整數位數多,那麼你能夠直接用字符串來存。             在使用時,m必須大於d,否則會報錯      3.三、日期類型:date,time,datetime,timestamp,year             year:YYYY(範圍:1901/2155)2018             date:YYYY-MM-DD(範圍:1000-01-01/9999-12-31)例:2018-01-01             time:HH:MM:SS(範圍:'-838:59:59'/'838:59:59')例:12:09:32             datetime:YYYY-MM-DD HH:MM:SS(範圍:1000-01-01 00:00:00/9999-12-31 23:59:59 Y)例: 2018-01-01 12:09:32             timestamp:YYYYMMDD HHMMSS(範圍:1970-01-01 00:00:00/2037 年某時)         經常使用寫法:               create table t1(x datetime not null default now()); # 須要指定傳入,空值時默認取當前時間               create table t2(x timestamp); # 無需任何設置,在傳空值的狀況下自動傳入當前時間      3.四、字符串類型             CHAR 和 VARCHAR 是最常使用的兩種字符串類型。             CHAR(N)用來保存固定長度的字符串,對於 CHAR 類型,N 的範圍 爲 0 ~ 255             VARCHAR(N)用來保存變長字符類型,對於 VARCHAR 類型,N 的範圍爲 0 ~ 65 535             CHAR(N)和 VARCHAR(N) 中的 N 都表明字符長度,而非字節長度。#CHAR類型             對於 CHAR 類型的字符串,MySQL 數據庫會自動對存儲列的右邊進行填充(Right Padded)操做,直到字符串達到指定的長度 N。
            而在讀取該列時,MySQL 數據庫會自動將填充的字符刪除。咱們能夠把sql——mode設置爲 PAD_CHAR_TO_ FULL_LENGTH,就會顯示填充的字符。
            #VARCHAR類型                     VARCHAR 類型存儲變長字段的字符類型,與 CHAR 類型不一樣的是,其存儲時須要在前綴長度列表加上實際存儲的字符,該字符佔用 1 ~ 2 字節的空間。
                    當存儲的字符串長度小 於 255 字節時,其須要 1 字節的空間,當大於 255 字節時,須要 2 字節的空間。             length(字段) #查看該字段數據的字節長度
            char——length(字段) #查看該字段數據的字符長度    3.五、枚舉類型enum和集合類型set             enum:單選,只能在給定的範圍內選一個值             set:多選,能夠在給定的範圍內選擇一個或多個值       示例:           枚舉               CREATE TABLE shirts (name VARCHAR(40),size ENUM('xsmall', 'small', 'medium', 'large', 'x-large'));           INSERT INTO shirts VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');         集合           CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));           INSERT INTO myset VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');  四、表的完整性約束    4.1 分類       PRIMARY KEY (PK) 標識該字段爲該表的主鍵,能夠惟一的標識記錄         FOREIGN KEY (FK) 標識該字段爲該表的外鍵         NOT NULL 標識該字段不能爲空,不設置默承認覺得空的         UNIQUE KEY (UK) 標識該字段的值是惟一的         AUTO_INCREMENT 標識該字段的值自動增加(整數類型,並且爲主鍵)         DEFAULT 爲該字段設置默認值,不設置默認爲null         UNSIGNED 無符號,不設置默認爲有符號的         ZEROFILL 使用0填充    4.二、not null,default,unique,primary key,unsigned         create table t1(id int unsigned not null default 1) #表示id字段爲無符號,不能夠爲空,默認值爲1         create table t1(id int unique) #表示id字段的值不能重複         create table t1(id int ,name char(10),constraint ak_name unique(name)) #這也表示name不能重複
        聯合惟一:               create table t1(id int,name char(10),unique(id,name)) #表示必須不能出現id和name都相同
        主鍵:至關於not null + unique
              create table t1(id int primary key)               create table t1(id int,name char(10),constriaint pk_name primary key(id) #這是兩種方式均可以設置主鍵,         聯合主鍵:               create table t1(id int,name char(10),primary key(id,name))     4.三、自動增加             create table t1(id int primary key auto_increment,name char(10)
            insert into t1(name) values('nnn'),('sss'); #此時沒有輸入id,但id會從1開始自動增加             insert into t1 values(4,'rrr'); #當咱們指定id了,就以指定的爲準             insert into t1(name) values('tt') #如今的id也是自動增加,可是接着上一條的id開始增加
            上面插入數據的id分別是:1,2,4,5
            對於自動增加的字段,能夠用delete刪除數據,但再插入值時是按照刪除前最後一條數據的id值開始增加
            delete from t1             select * from t1; #如今爲空的             insert into t1(name)values('rtsa') #因爲刪除前最後一條id爲5,因此接上,那這一條id爲6
            用truncate清空表,在插入數據又是從1開始自增             truncate t1;             insert into t1(name) values('fsdf') #此時的id爲1
            在建立表的時候能夠設定自動增加的起始值             create table t1(id int auto_increment,name char(10),auto_increment=3); #這樣設定後,表的自動增加就從3開始
            建立表之後,也能夠修改自增起始值             alter table t1 auto_increment=4;
            設置步長                 set session auto_increment_increment=2; #這是設置會話級別的步長                 set global auto_increment_increment=2; #這是設置全局級別的步長             例子:                 set global auto_increment_increment=5;                 set global auto_increment_offset=3;
            最後獲得的自動增加值爲:1,6,11,16.。。。。。      4.四、外鍵foreign key:其實就是代表表與表之間的關係,表與表之間有三種關係,一對一,一對多,多對多,在任何狀況下都得先把‘一’的表(就至關於被指向的表)建立。         一對多關係         

        先建立‘一’的表,就是dep表
        create table dep(id int primary key,name char(10),comment char(10)); #而後插入數據就行
        在建立‘多’的表,就是emp表,在emp表中的dep_id,指向的是dep表中的id
        create table emp(
        id int primary key,
        name char(10),
        gender enum('male','female'),
        dep_id int,
        foreign key(dep_id) references dep(id) on delete cascade on update cascade);         一對一關係:就只要把外鍵設爲惟一的就好了         
        先建立被指向的表,即customer表
        create table customer(id int primary key,name char(10),phone int,qq int);
        在建立student表,表中的cm_id指向customer表中的id
        create table student(
        id int primary key,
        cname char(10),
        class_name,
        cm_id int unique,
        foreign key(cm_id) references customer(id) on delete cascade on update cascade);         多對多關係:咱們就應該創建第三個表(關聯表)來鏈接連個表的關係         

        多對多關係表,就應該最後建立關聯表就行,先建立另外兩個表就行,即author表和book表
        create table author(id int primary key,name char(10));         create table book(id int primary key,bname char(10),price int);
        最後來建立關聯表,即author表
        create table author_book(
        id int primary key,
        author_id int,
        book_id int,
        foreign key(author_id) references author(id) on delete cascade on update cascade,         foreign key(book_id) references book(id) on delete cascade on update cascade);         注意:咱們通常在建立表的時候最好把id設置爲主鍵,其次是咱們外鍵指向的字段必須是not null + unique的,最後是,
           在外鍵的後面加上on delete cascade on update cascade,做用在於外鍵的值會跟隨指向的字段的值改變而改變   五、表的修改alter table         語法:             1. 修改表名                 ALTER TABLE 表名 RENAME 新表名
            2. 增長字段                 ALTER TABLE 表名
    ADD 字段名 數據類型 [完整性約束條件…], #注意這裏能夠經過逗號來分割,一下添加多個約束條件     ADD 字段名 數據類型 [完整性約束條件…];                  ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] FIRST; #添加這個字段的時候,把它放到第一個字段位置去。                 ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名;
                    #after是放到後的這個字段的後面去了,咱們經過一個first和一個after就能夠將新添加的字段放到表的任意字段位置了。
            3. 刪除字段                  ALTER TABLE 表名 DROP 字段名;
            4. 修改字段
                ALTER TABLE 表名 MODIFY 字段名 數據類型 [完整性約束條件…];#modify給字段從新定義類型和約束條件,但已經有主鍵是不能修改,也不須要再寫                 ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…]; #change比modify還多了個更名字的功能,這一句是隻改了一個字段名                  ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];#這一句除了改了字段名,還改了數據類型、完整性約束等等的內容             

            5.增長複合主鍵                      alter table 表名 add primary key(字段,字段)
            6.刪除主鍵                     alter table 表名 drop primary key #主鍵只能經過這方式進行刪除   六、複製表         方法一             alter table t2 select * from t1; #複製結構+數據             這種狀況下能夠指定複製表的某些字段,只需把*換成表名(字段)就行,可是不能複製主鍵、外鍵、自動增加約束條件
            alter table t2 select * from t1 where 1=0; #由於1=0爲假的,因此找不到對應數據,就只複製結構
        方法二             create table t2 like t1;             這種方法只複製結構,沒有數據,但全部的約束條件都複製了 文章轉自Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
相關文章
相關標籤/搜索