mysql - 約束(constraint)
約束實際上就是表中數據的限制條件,目的就是為了保證表中的記錄完整和有效。
約束種類
非空約束(not null)
唯一性約束(unique)
主鍵約束(primary key) PK
外鍵約束(foreign key) FK
檢查約束(目前MySQL不支持、Oracle支持)
非空約束:
mysql> create table t_user(
-> id int(10),
-> name varchar(32) not null
-> );
Query OK, 0 rows affected (0.08 sec)
唯一性約束:
unique約束的字段,具有唯一性,不可重復,但可以為null
-
列級約束
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128) unique -> ); Query OK, 0 rows affected (0.03 sec)
-
表級約束,可以給多個字段聯合約束(表示兩個或以上的字段同時與另一條記錄相等,則報錯)
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128), -> unique(name,email) -> ); Query OK, 0 rows affected (0.01 sec)
表級約束可以給約束起名字(方便以后通過這個名字來刪除這個約束)
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128), -> constraint t_user_email_unique unique(email) -> ); Query OK, 0 rows affected (0.06 sec)
主鍵
一張表應該有主鍵字段,如果沒有,表示該表無效
主鍵值:是當前行數據的唯一標識、是當前行數據的身份證號
即使表中兩行記錄相關數據相同,但由於主鍵值不同,所以也認為是兩行不同的記錄
- 單一主鍵:給一個字段添加主鍵約束(列級定義)
mysql> create table t_user( -> id int(10) primary key, -> name varchar(32) -> ); Query OK, 0 rows affected (0.07 sec)
- 復合主鍵(表級定義)
mysql> create table t_user( -> id int(10), -> name varchar(32) not null, -> email varchar(128) unique, -> primary key(id,name) -> ); Query OK, 0 rows affected (0.05 sec)
主鍵約束與“not null unique”區別
給某個字段添加主鍵約束之后,該字段不能重復也不能為空,效果和"not null unique"約束相同,但是本質不同。
鍵約束除了可以做到"not null unique"之外,還會默認添加"索引——index"
文章來源:https://xulinjie.blog.csdn.net/article/details/79655073