標籤:mysql 約束 注意點
not null約束。
not null約束只能在列名後面聲明,不能使用constraint語句聲明,當然也就沒無法聲明約束名稱了。更改欄位為null或者not null只能使用alter table table_name modify col_name (not) null;無法使用constraint語句修改。也就是說not null雖然是約束,但是卻和constraint語句扯不上關係。not null約束在information_schema裡面的table_constraints表中也無法查到。
主鍵約束。
主鍵約束既可以在列名後面聲明,也可以在聲明完所有列之後聲明。前者只需要在列明後面跟上primary key就行了,後者的聲明方法是[CONSTRAINT [symbol]] PRIMARY KEY(COL1,...),這裡聲明約束名稱是沒有任何意義的,因為你假如使用CONSTRAINT [symbol]語句之後,MySQL會自動把約束名稱改為PRIMARY,可以到information_schema裡面的table_constriants表裡面驗證。所以我們在聲明所有列再聲明primary key都不會使用constraint關鍵字。主鍵即唯一索引加上not null約束,主鍵列上會建立唯一索引,索引的名稱和約束名稱相同,預設為BTREE索引,索引資訊可以在information_schema裡面的statistics表裡面查詢。
刪除主鍵約束使用alter table table_name drop primary key;
unique約束。
unique約束也可以稱為unique索引,因為二者都是同時存在。建立表的時候可以使用如下兩種方法建立unique約束:
(1)create table t1(id int primary key,name varchar(20) unique);無法指定約束名稱,系統預設約束名稱和欄位名相同。
(2)create table t1(id int primary key,name varchar(20),constraint t1_unq unique(name));
表已經存在時可以通過兩種方式添加unique約束。
(1)alter table t1 modify name varchar(20) unique;
(2)alter table t1 add constraint t1_unq unique(name);
(3)alter table t1 add unique index t1_unq(name);
因為unique約束就是unique索引,所以我們都會用第三種方式去添加unique索引,如果不帶unique關鍵字則說明添加的是普通索引。unique約束(unique索引)的資訊會同時在information_schema裡面的statistics表和table_constraints表裡面保持一致。
刪除unique約束(索引)只能使用如下語句:
alter table t1 drop index t1_unq;
4. 外鍵約束。
在建表時建立外鍵約束可以使用如下方法(注意被引用的表的那個列必須有unique約束):
(1)create table t1(id int primary key, name varchar(20) references t2(name));該方法無法聲明約束名稱。
(2)create table t1(id int primary key,name varchar(20), constraint t1_fk_name foreign key(name) references t2(name));該方法可以聲明約束名。
在表已經存在的時候添加外鍵約束可以使用如下語句:
alter table add constraint t1_fk_name foreign key(name) references t2(name));
刪除外鍵可以使用如下語句:
alter table drop foreign key t1_fk_name;
本文出自 “trikker” 部落格,請務必保留此出處http://trikker.blog.51cto.com/7478890/1538373