約束 約束是作用於表中欄位上的規則,用於限制存儲在表中的數據,保證資料庫中數據的正確、有效和完整。 一. 常用的約束 約束作用於表中的欄位,可以在創建表或修改表的時候添加約束。 AUTO_INCREMENT 約束關鍵字 自動增長:用於比如每次新添加一行數據,id就+1。 如果自增和主鍵一起使用時,插 ...
約束
約束是作用於表中欄位上的規則,用於限制存儲在表中的數據,保證資料庫中數據的正確、有效和完整。
一. 常用的約束
- 約束作用於表中的欄位,可以在創建表或修改表的時候添加約束。
- AUTO_INCREMENT 約束關鍵字 自動增長:用於比如每次新添加一行數據,id就+1。
- 如果自增和主鍵一起使用時,插入了一行未按約束的數據(會顯示插入失敗),資料庫會申請一次主鍵,那麼下一次插入正確的數據時,獲得的自增主鍵就會是資料庫中前一個自增主鍵+2的值。
- 一個欄位可以有多個約束。
- 創建表時添加約束:
create table {表名}(
欄位1 類型 [{約束}] [comment 註釋],
欄位2 類型 [{約束}] [comment 註釋],
...
欄位n 類型 [{約束}] [comment 註釋]
)[comment 表註釋];
- CHECK 檢查約束語法:
# 下麵是創建表語法中的其中一行
# 如我們的目的是:創建一個age欄位,限制取值範圍為0-120
age int check ( age > 0 and age <= 120) comment '年齡',
- DEFAULT 預設約束語法:
# 下麵是創建表語法中的其中一行
# 如我們的目的是:創建一個status欄位,預設取值為1
status char(1) default '1' comment '狀態',
二. 外鍵約束
外鍵約束用於兩張表之間建立連接,從而保證數據的一致性和完整性。
- 如上圖所示,箭頭的起點稱為“子表”,終點稱為“父表”。
- 主表與從表:主表存的是從北京到上海的高鐵信息,從表則存的是:北京-天津;天津-河北....這種存在一定的主從關係,在資料庫中稱為主從表。
- 父表與子表:你定義了一個導航菜單表(父表),然後每一個菜單下的子菜單定義了一張表(子表),這類數據稱為父表與子表。
1. 添加外鍵:
# 創建表時建立外鍵
create table {表名}(
{欄位名} {數據類型},
...
[constraint] [{外鍵名稱}] foreign key({外鍵欄位名}) references {主表}({主表列名})
);
# 修改表時建立外鍵
alter table {表名} add constraint {外鍵名稱} foreign key({外鍵欄位名}) references {主表}({主表列名});
2. 刪除外鍵:
alter table {表名} drop foreign key {外鍵名};
3. 外鍵的刪除/更新行為
# 添加外鍵時指定行為
alter table {表名} add constraint {外鍵名稱} foreign key({外鍵欄位名}) references {主表}({主表列名}) on update {在更新時的行為} on delete {在刪除時的行為};