1. 程式人生 > >約束 CONSTRAINT

約束 CONSTRAINT

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 唯一索引名(列名,列名,...)
);
--
create
table 表名( 列名 數據類型, 列名 數據類型, 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