在SQL中,约束是一种用于限制数据库中数据插入、更新或删除操作的规则。它可以保证数据的完整性和一致性,避免了数据的不合法或不一致。
以下面2个表格为例:
主键表 product
productid | petid | name | sex |
PR-01 | 01 | 鹦鹉 | 雄性 |
PR-02 | 04 | 天使鱼 | 雄性 |
PR-03 | 02 | 英短 | 雌性 |
PR-04 | 03 | 博美 | 雄性 |
PR-05 | 05 | 长尾鬣蜥 | 雌性 |
PR-06 | 02 | 布偶 | 雌性 |
外键表 pet
petid | type | sex |
01 | 鸟类 | 雄性 |
02 | 猫 | 雄性 |
03 | 狗 | 雌性 |
04 | 鱼 | 雄性 |
05 | 爬行类 | 雌性 |
1、主键约束
通过定义一个或多个列作为唯一标识符来防止重复记录的插入:
ALTER TABLE product ADD CONSTRAINT pk_product PRIMARY KEY (productid)
2、unique约束
用于确保列中的每个值具有唯一性
ALTER TABLE pet ADD CONSTRAINT uni_pet UNIQUE (type)
3、check约束
用于限制列中值的范围
添加CHECK完整性约束,以保证性别只能包含“雄性”或“雌性”:
ALTER TABLE product ADD CONSTRAINT chk_sex CHECK (sex IN ('雄性', '雌性'))
4、外键约束
用于在两个表之间创建关系,确保一个表中的数据与另一个表的数据相关联
通过子句ON DELETE、ON UPDATE控制外键表中的数据变化
当主键表中的记录被删除时,如果在外键表中仍然存在与之关联的记录,则会阻止删除和更改操作:
ALTER TABLE pet
ADD CONSTRAINT fk_pet_product
FOREIGN KEY (petid) REFERENCES product(petid)
ON DELETE RESTRICT
ON UPDATE RESTRICT
当主键表中的记录被删除时,外键表中的相应记录也会被自动删除:
ALTER TABLE pet
ADD CONSTRAINT fk_pet_product
FOREIGN KEY (petid) REFERENCES product(petid)
ON DELETE CASCADE
当主键表中的记录被删除时,外键表中的相应记录的外键列会被设置为 NULL:
ALTER TABLE pet
ADD CONSTRAINT fk_pet_product
FOREIGN KEY (petid) REFERENCES product(petid)
ON DELETE SET NULL