mysql約束和索引

2021-09-23 11:22:48 字數 3914 閱讀 7655

1、作用

保證資料的完整性、一致性、有效性

2、約束分類

1、預設約束(default)

插入記錄,不給該字段賦值,則使用預設值

1、非空約束(not null)

不允許該字段的值有null記錄

3、示例:

create table t2(

id int not null,

name varchar(15),

*** enum("m","f","s") default "s"

) #建立完使用desc查詢

1、定義

對資料庫表的一列或多列的值進行排序的一種結構(btree方式)

2、優點

加快資料檢索速度

3、缺點

1、需要占用物理儲存空間

2、當對表中資料更新時,索引需要動態維護,降低資料維護速度

4、索引示例

1、開啟執行時間檢測:set profiling = 1

2、執行查詢語句

select name from t1 where name = "lucy99999"

3、查詢執行時間

show profiles;

4、在name欄位建立索引

create index name on t1(name);

5、關閉profiling

1、使用規則

1、可設定多個字段

2、字段值無約束

3、key標誌:mul

2、建立index

1、建立表時

create table 表名 (...

index(欄位名),index(欄位名));

2、已有表

create index 索引名 on 表名(欄位名);

eg:create index name on t1(name);

3、檢視索引

1、desc 表名; -->key標誌為:mul

2、show index from 表名\g; (key值為索引名)

4、刪除索引

1、drop index 索引名 on 表名;

eg:drop

1、使用規則

1、可設定多個字段

2、約束:字段值不允許重複,但可為null

3、key標誌:uni

2、建立

1、建立表時建立

create table 表名(

....

unique(欄位名),unique(欄位名)...);

2、已有表

create unique index 索引名 on 表名(欄位名);

3、檢視、刪除同普通索引

show index from t1\g; #若是唯一索引non_unique為0

drop index 索引名 on 表名;

1、使用規則

1、只能有乙個主鍵字段

2、約束:不允許重複,且不能為null

3、key標誌:pri

4、通常設定記錄編號欄位id,能唯一鎖定一條記錄

2、建立主鍵

1、建立表時

create table t1(

id int primary key auto_increment,

name varchar(15)

) auto_increment = n; #設定自增長起始值為n

已有表新增自增長屬性:

alter table 表名 modify id int auto_increment;

已有表重新指定起始值:

alter table 表名 auto_increment = n;

注意:n必須大於當前表內最大主鍵值,否則按原順序插入

2、已有表新增主鍵(但要保證id欄位無空值無重複)

alter table 表名 add primary key(id);

3、檢視: show index from 表名\g;

4、刪除

1、先刪除自增長屬性(modify)

alter table 表名 modify id int; #id為主鍵

2、刪除主鍵索引

alter table 表名 drop primary key;

eg:主鍵為空插入時,自增長屬性會自動遞增

注意:但若刪除該記錄重新插入時會在原來的基礎上繼續遞增

1、定義:

讓當前表字段的值在另乙個表的範圍內選擇

2、語法:

foreign key(參考欄位名)

references 主表(被參考欄位名)

on delete 級聯動作

on update 級聯動作

3、使用規則

1、主表、從表字段資料型別一致

4、示例:

表1、繳費資訊表(財務)

id 姓名 班級 繳費金額

1 唐伯虎 aid06 300

2 點秋香 aid06 260

表2、學生資訊表(班主任)

id 姓名 繳費金額

create table jftab(

id int primary key,

name varchar(15),

class char(6),

money int);

create table bjtab(

stu_id int,

name varchar(15),

money int,

foreign key(stu_id) references jftab(id)

on delete cascade

on update cascade

);5、刪除外來鍵

alter table 表名 drop foreign key 外鍵名;

1、查詢外鍵名:show create table 表名;

2、刪除:alter table bjtab drop foreign key

bjtab_ibfk_1;

6、級聯動作

1、cascade 級聯更新

資料級聯刪除、更新(參考字段)

2、restrict(預設)

從表有相關聯記錄,不允許主表操作

3、set null

主表刪除、更新,從表相關聯記錄字段值為null

7、已有表新增外來鍵

alter table 表名 add

foreign key(被參考欄位名) references 主表(參考字段)

注意:當從表某個欄位的外來鍵參照同乙個主表字段的不同級聯屬性,只會表現一種(這裡是set null)

MySQL的約束和索引

一 約束 1.非空約束 not null 2.唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null除外。3.主鍵約束 primary key pk 主鍵約束 not null unique 4.外來鍵約束 foreign key references 參考 fk con...

MySQL的約束和索引

mysql的約束和索引。一 約束 1.非空約束 not null 2.唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null除外。3.主鍵約束 primary key pk 主鍵約束 not null unique 4.外來鍵約束 foreign key referenc...

mysql 索引與約束 mysql約束與索引的區別

摘自 一 約束 作用 是為了保證資料的完整性而實現的摘自一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具 約束 這裡主要講解mysql的約束 1 非空約束 not null 指示某列不能儲存null 值 2 唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null...