約束 CONSTRAINT
阿新 • • 發佈:2018-10-12
rim sql class 一個 定義 pri 強制 增加 key)
約束用於限制加入表中數據的類型
約束的種類:
非空約束(NOT NULL):約束列不接受NULL值,強制字段始終包含值。
唯一約束(UNIQUE):約束一列或一組列中的數據是唯一的。表中可以有多個唯一約束。
主鍵約束(PRIMARY KEY):約束一列或一組列中的數據是唯一的,且不能改動,一個表中只能有一個主鍵約束。
外鍵約束(FOREIGN KEY):外鍵是表中的一列,其值必須列在另一個表的主鍵中。只有InnoDB支持。
默認值約束(DEFAULT):約束向列提供默認值。
檢查約束(CHECK):用於保證一列或一組列中的數據滿足一組指定的條件。用於約束列中值的合法取值範圍。MySQL不支持該約束。
非空約束 NOT NULL
默認情況下列值是可以接受NULL值得。
創建表示添加非空約束:在類的類型後面添加NOT NULL
create table 表名 ( 列1 數據類型 not null, 列2 數據類型 not null );
修改表添加非空約束
alter table 表名 add 列名 數據類型 not null; -- alter table 表名 modify 列名 數據類型 not null;
刪除非空約束
alter table 表名 modify 列名 數據類型 null;
唯一約束 UNIQUE
唯一約束與主鍵約束的區別
--表中可以包含多個唯一約束但只能包含一個主鍵
--唯一約束列可以包含NULL值,但主鍵不可以
--唯一約束列可以修改或更新,但是主鍵不可以
--唯一約束列的值可刪除後重復使用,但是主鍵不可以
--唯一約束列不可以用來定義外鍵
創建表示使用UNIQUE(列名) 指定唯一約束,有以下4方式
create table 表名( 列名 數據類型, 列名 數據類型 unique, ); -- create table 表名( 列名 數據類型, 列名 數據類型, unique(列名,列名) ); -- create table 表名( 列名 數據類型, 列名 數據類型 unique key 唯一索引名(列名,列名,...) ); -- createtable 表名( 列名 數據類型, 列名 數據類型, constraint 約束名 unique(列名,列名,...) );
向已有表中添加唯一約束
alter table 表名 add unique key 唯一索引名(列名,列名,...) alter table 表名 add unique(列名,列名, ...) alter table 表名 add constraint 約束名 unique(列名,列名,...)
修改表中的某列為唯一索引
alter table 表名 modify 列名 數據類型 unique;
刪除表中的唯一約束
alter table 表名 drop index 唯一索引名; -- 唯一索引名可通過show create table 表名查詢獲得
主鍵約束 PRIMARY KEY
表中任意類只要滿足以下條件,都可以用於主鍵
--任意兩行的主鍵都不相同
--每行都具有主鍵值(即列中不允許NULL值)
--包含主鍵的列從不修改或更新
--主鍵值不能重用
創建表時指定主鍵
create table 表名( 列名 數據類型, 列名 數據類型, [constraint [索引名]] PRIMARY KEY(列名) ); -- create table 表名( 列名 數據類型 PRIMARY KEY, 列名 數據類型 );
向已有表中增加主鍵約束
alter table 表名 add 列名 數據類型 primary key; -- 向表中增加一列,並且將其設為主鍵 -- alter table 表名 add primary key(列名); --將表中已有的列變為主鍵 -- alter table 表名 add constraint [約束名] primary key(列名); --將表中已有的列變為主鍵
刪除主鍵約束
alter table 表名 drop primary key;
外鍵約束 FOREIGN KEY 只有InnoDB支持外鍵約束
在創建表示定義外鍵約束
create table 主表名( 列名 數據類型, 列名 數據類型, primary key(列名) ); create table 附表名( 列名 數據類型, 列名 數據類型, constraint [約束名] foreign key(列名) references 主表名(主表的primary key列名) );
向已有表中添加外鍵約束
alter table 表名 add constraint [約束名] foreign key(列名) references 主表名(主表的primary key列名);
刪除表中的外鍵約束
alter table 表名 drop foreign key 外鍵約束名;
默認值約束 DEFAULT
create table 表名( 列名 數據類型 default 默認值, 列名 數據類型 );
向已有表添加默認值約束或修改默認值約束
alter table 表名 modify 列名 數據類型 [default 默認值]; -- alter table 表名 alter 列名 set default 默認值;
刪除默認值約束
alter table 表名 alter 列名 drop default;
約束 CONSTRAINT