約束是作用于數(shù)據(jù)表中列上的規(guī)則,用于限制表中數(shù)據(jù)的類型。約束的存在保證了數(shù)據(jù)庫(kù)中數(shù)據(jù)的精確性和可靠性。
約束有列級(jí)和表級(jí)之分,列級(jí)約束作用于單一的列,而表級(jí)約束作用于整張數(shù)據(jù)表。
下面是 SQL 中常用的約束,這些約束雖然已經(jīng)在關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)一章中討論過(guò)了,但是仍然值得在這里回顧一遍。
約束可以在使用 CREATE TABLE 創(chuàng)建表的時(shí)候指定,也可以在表創(chuàng)建之后由 ALTER TABLE 設(shè)置。
任何現(xiàn)有約束都可以通過(guò)在 ALTER TABLE 命令中指定 DROP CONSTRAINT 選項(xiàng)的方法刪除掉。
例如,要去除 EMPLOYEES 表中的主鍵約束,可以使用下述命令:
ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;
一些數(shù)據(jù)庫(kù)實(shí)現(xiàn)可能提供了刪除特定約束的快捷方法。例如,要在 Oracle 中刪除一張表的主鍵約束,可以使用如下命令:
ALTER TABLE EMPLOYEES DROP PRIMARY KEY;
某些數(shù)據(jù)庫(kù)實(shí)現(xiàn)允許禁用約束。這樣與其從數(shù)據(jù)庫(kù)中永久刪除約束,你可以只是臨時(shí)禁用掉它,過(guò)一段時(shí)間后再重新啟用。
完整性約束用于保證關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)的精確性和一致性。對(duì)于關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō),數(shù)據(jù)完整性由參照完整性(referential integrity,RI)來(lái)保證。
有很多種約束可以起到參照完整性的作用,這些約束包括主鍵約束(Primary Key)、外鍵約束(Foreign Key)、唯一性約束(Unique Constraint)以及上面提到的其他約束。