1. 程式人生 > 其它 >MySQL筆記六:約束

MySQL筆記六:約束

在建立表的時候,可以給表中的資料加上一些約束,來保證這個表中的資料的完整性和準確性 約束包括: not null非空約束 unique唯一性約束,不能重複,但是可以有多個null primary key主鍵約束(簡稱PK) foreign key外來鍵約束(簡稱FK) check(MySQL不支援,oracle支援)   6.1 notnull create table t_vip(     id int,     name varchar(32) not null ); insert into t_vip(id) values(3);//會報錯,因為name限定不能為空   6.2 unique
create table_vip(         id int,         name varcahr(32) unique,//約束新增到列後面,被稱為列級約束         email varchar(255) ); insert ito t_vip(id,name,email) values (1,'wang','2343'); insert ito t_vip(id,name,email) values (2,'wang','1343');//報錯   6.3 unique兩個欄位聯合起來具有唯一性 create table_vip(         id int,         name varcahr(32),
        email varchar(255),         unique(name,email)//約束沒有新增到列的後面,稱為表級約束 ); 總結:需要給多個欄位聯合起來表示某一個約束的時候,採用表級約束,not null只有列級約束   6.4 not null unique約束 create table t_vip(     id int,     name varchar(32) not null unique ); 如果一個欄位同時被not null和unique約束式,該欄位自動變成主鍵欄位,(oracle不是這樣)     6.5 primary key主鍵約束 被加了主鍵約束的欄位被稱為主鍵欄位,主鍵欄位上的每一個值都稱為主鍵值
主鍵的作用:主鍵是每一行記錄的標識,相當於每一條資料的身份證號,沒有主鍵,表無效 主鍵的特徵:not null + unique create table t_vip(     id int primary key,//單一主鍵,列級約束     name varchar(32) ); 或者 create table t_vip(     id int,     name varchar(32),     primary key(id,name)//複合主鍵,兩個欄位聯合起來不重複即可,在實際中不建議使用複合主鍵,表級約束 ); 注意:一張表中只能有一個主鍵,單一主鍵、複合主鍵算一個主鍵,主鍵值建議定長型別的數,不建議varchar   主鍵分類:自然主鍵和業務主鍵,儘量使用沒有意義的自然主鍵 create table t_vip(     id int primary key auto_increment,//自動生成從1開始遞增的自然數     name varchar(32) );   6.6foreign key外來鍵約束 被加了外來鍵約束的欄位被稱為外來鍵欄位,外來鍵欄位上的每一個值都稱為外來鍵值 多個重複資料冗餘,將一張表拆分成兩個表 t_class classno (pk)        classname 100                    北京市第一中學高一1班 101                    北京市第一中學高一2班 t_student no(pk)            name            cno 1                    jack                100 2                    lucky              101 3                    lily                  100 4                    alice                100 5                    bob                 101   當cno中的欄位沒有約束時,可能會導致資料無效,為了保證cno欄位中的值有效,需要給cno欄位加上外來鍵約束 t_class是父表,t_student是子表 建立時:先建立父,再建立子 刪除時:先刪除子,再刪除父 create table t_class(         classno int primary key,         classname varchar(200) ); create table t_student(         no int primary key auto_increment,         name varchar(255),         cno int,         foreign key(cno) reference t_class(classno)//被引用的classno欄位需要具有唯一性,con需要為null或classno中的值 );   6.7儲存引擎 儲存引擎是一個表儲存/組織資料的方式,是mysql中特有的術語 在建立表時,可以在‘)’後面加上engine關鍵字制定儲存引擎 create table t_class(         classno int primary key,         classname varchar(200) )ENGINE=InnoDB DEFAULT CHARSET=utf8;   show create table t_class;//可以檢視當前表格使用哪個儲存引擎 show engines \G;//可以檢視當前支援什麼儲存引擎 mysql支援9個,版本不同支援引擎不同   常見儲存引擎:
  • MyISM:使用三個檔案表示資料,格式檔案、資料檔案、索引檔案(表的目錄,可以縮小檢索範圍,提高搜尋效率,可被壓縮,可以設定成只讀表來節省空間),對於一張表上加有unique約束的欄位,會自動生成索引。安全性低,不支援事務。
  • InnoDB:重量級儲存引擎,預設儲存引擎,特點是非常安全,崩潰後可以自動恢復資料,但是效率不高。在資料庫目錄中以.frm格式檔案表示。
  • MEMORY:資料儲存在記憶體當中,且行的長度確定,因此它的執行速度很快。缺點是不安全,關機之後資料消失。不包含TEXT或BLOB欄位,在資料庫目錄中以.frm格式檔案表示。記憶體直接取資料,因此查詢速度極快
    注:***.sql檔案被稱為sql指令碼檔案 source D:\...\***.sql    執行指令碼檔案,那麼該檔案的語句將被全部執行