Mysql-----約束、索引
約束
作用:保證資料的完整性,一致性,有效性,
約束分類:
1)預設約束(default):插入記錄時,如果不給該欄位,則使用預設值
2)非空約束(not NULL): 不允許該欄位的值由NULL記錄
示例:
sex enum("M","F","S") not null defalut "S"
MySQL索引:
定義:對資料庫的表的一列或多列的值進行排序(Btree方式)的一種結構
優點:加快資料檢索的速度
缺點:
- 索引需要佔領物理儲存空間
- 對錶中資料進行增加、刪除和修改的時候,索引需要動態維護,降低了資料的維護速度
1)開啟執行時間檢測: set profiling=1; 2)執行查詢語句 : select name from t1 where name="lucy99999"; 3)檢視執行時間 show profiles; 4)在name欄位建立索引 craete index name on t1(name); 5)再執行查詢語句 select name from t1 where name="lucy88888"; 6)檢視執行時間 show profiles; 7)關閉執行時間檢測: set profiling=0;
索引的型別:
1.普通索引(index)
1)使用規則:
- 可以設定多個欄位
- 欄位值無約束
- key標誌:MUL
2)建立index
- 建立表時建立:create table 表名(... index(欄位名),index(欄位名));
- 已有表中建立:create index 索引名 on 表名(欄位名);
- 檢視索引:desc 表名 ------->key標誌:MUL (show index from 表名)
- 刪除索引:drop index 索引名 on 表名
2.唯一索引(unique index)
1)使用規則:
- 可以設定多個欄位
- 約束:欄位值不允許重複,但可以為NULL
- key標誌:UNI
2)建立唯一約束unique index
- 建立表時建立:unique index(欄位名),unique index(欄位名)
- 已有表中建立:create unique index 索引名 on 表名(欄位名)
3)檢視索引 desc 表名 ---->key標誌:NUI
4)刪除索引 drop unique index 索引名 on 表名
3.主鍵約束(primary key)
自增長屬性 (auto_increment,配合主鍵一起使用)
使用規則:
- 一個表中只能有一個primary key欄位
- 約束:不允許重複,並且不能為NULL
- key標誌:PRI
- 通常設定記錄編號欄位id,能唯一所鎖定一條記錄
建立主鍵:[通常將id設定為主鍵]
- 建立表時建立:(id int primary key auto_increment)auto_increate=起始值;
- 已有表中重新指定起始值:alter table 表名 auto_increment=起始值;
- 已有表建立主鍵:alter table 表名 add primary key(id);
刪除:
- 刪除自增長屬性(modify):alter table 表名 modify id int;
- 刪除主鍵索引:alter table 表名 drop primary key;
4.外籍索引(foreign key)
定義:讓當前表字段的值在另一個表的範圍內進行選擇
語法:
foreign key(參考欄位名)
references 主表 (被參考欄位名)
on delete (級聯動作)
on update (級聯動作)
級聯動作:
1)cascade
資料級聯刪除、更新(參考欄位)
2)restrict (預設)
從表有相關聯記錄,不允許主表操作
3) set null
主表刪除、更新,從表相關聯記錄欄位值為null刪除外來鍵: alter table 表名 drop foreign key 外來鍵名;
找外來鍵名 : show create table 表名
已有表新增外來鍵:
alter table 表名 add
foreign key(參考欄位) references 主表(被參考欄位)
on delete ...
on update ...
使用規則:
1.主表、從表字段資料型別要一致
2.主表被參考欄位 :主鍵