原文: SQL Server 表的管理_關于完整性限制的詳解(案例代碼)
SQL Server 表的管理之_關于完整性限制的詳解
一、概述:
●限制是SQL Server提供的自動保持資料庫完整性的一種方法, 它通過限制字段中資料、記錄中資料和表之間的資料來保證資料的完整性。
●SQL限制用于指定表中資料的規則。
●限制可以在建立表時規定(通過 CREATE TABLE 語句),或者在表建立之後規定(通過 ALTER TABLE 語句)。
1.1SQL建立限制
當使用CREATE TABLE語句建立表時,或者在使用ALTER TABLE語句建立表之後,可以指定限制。
文法
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);
SQL CREATE TABLE + CONSTRAINT 文法
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
1.2删除限制
任何現有限制都可以通過在 ALTER TABLE 指令中指定 DROP CONSTRAINT 選項的方法删除掉。
例如,要去除 EMPLOYEES 表中的主鍵限制,可以使用下述指令:
ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;
一些資料庫實作可能提供了删除特定限制的快捷方法。例如,要在 Oracle 中删除一張表的主鍵限制,可以使用如下指令:
ALTER TABLE EMPLOYEES DROP PRIMARY KEY;
某些資料庫實作允許禁用限制。這樣與其從資料庫中永久删除限制,你可以隻是臨時禁用掉它,過一段時間後再重新啟用。
1.3完整性限制
完整性限制用于保證關系型資料庫中資料的精确性和一緻性。對于關系型資料庫來說,資料完整性由參照完整性(referential integrity,RI)來保證。
有很多種限制可以起到參照完整性的作用,這些限制包括主鍵限制(Primary Key)、外鍵限制(Foreign Key)、唯一性限制(Unique Constraint)以及上面提到的其他限制。
限制可分為以下幾種:
1、PRIMARY KEY 主鍵限制
2、FOREIGN KEY 外鍵限制
3、UNIQUE 限制 唯一限制
4、CHECK 限制 檢查限制
5、DEFUALT 定義 預設限制
下面分别詳解:
二、SQL PRIMARY KEY限制
2.1SQL PRIMARY KEY限制
●PRIMARY KEY限制唯一辨別資料庫表中的每條記錄。
●主鍵必須包含唯一的值。
●主鍵列不能包含NULL值。
●每個表都應該有一個主鍵,并且每個表隻能有一個主鍵。
2.2CREATE TABLE時的SQL PRIMARY KEY限制
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
2.3ALTER TABLE時的SQL PRIMARY KEY限制
當表已被建立時,如需在“P_Id”列建立PRIMARY KEY限制,請使用下面的SQL:
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
2.4撤銷PRIMARY KEY限制
如需撤銷PRIMARY KEY限制,請使用下面的SQL:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
三、SQL FOREIGN KEY限制
3.1SQL FOREIGN KEY限制
一個表中的FOREIGN KEY指向另一個表中的PRIMARY KEY。
。讓我們通過一個執行個體來解釋外鍵請看下面兩個表:
“人員”表:
P_Id是PRIMARY KEY
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
“訂單”表:P_Id是FOREIGN KEY
O_Id | OrderNo | |
---|---|---|
77895 | ||
44678 | ||
22456 | ||
4 | 24562 |
請注意,“Orders”表中的“P_Id”列指向“Persons”表中的“P_Id”列。
“Persons”表中的“P_Id”列是“Persons”表中的PRIMARY KEY。
“Orders”表中的“P_Id”列是“Orders”表中的FOREIGN KEY。
FOREIGN KEY限制用于預防破壞表之間連接配接的行為。
FOREIGN KEY限制也能防止非法資料插入外鍵列,因為它必須是它指向的那個表中的值之一。
3.2CREATE TABLE時的SQL FOREIGN KEY限制
下面的SQL在“訂單”表建立時在“P_Id”列上建立FOREIGN KEY限制:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
如需命名FOREIGN KEY限制,并定義多個列的FOREIGN KEY限制,請使用下面的SQL文法:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
3.3ALTER TABLE時的SQL FOREIGN KEY限制
當“Orders”表已被建立時,如需在“P_Id”列建立FOREIGN KEY限制,請使用下面的SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
3.4撤銷FOREIGN KEY限制
如需撤銷FOREIGN KEY限制,請使用下面的SQL:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
四、SQL UNIQUE 限制
4.1UNIQUE 限制唯一辨別資料庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 限制均為列或列集合提供了唯一性的保證。
PRIMARY KEY 限制擁有自動定義的 UNIQUE 限制。
請注意,每個表可以有多個 UNIQUE 限制,但是每個表隻能有一個 PRIMARY KEY 限制。
4.2CREATE TABLE 時的 SQL UNIQUE 限制
下面的 SQL 在 "Persons" 表建立時在 "P_Id" 列上建立 UNIQUE 限制:
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如需命名 UNIQUE 限制,并定義多個列的 UNIQUE 限制,請使用下面的 SQL 文法:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
4.3ALTER TABLE 時的 SQL UNIQUE 限制
當表已被建立時,如需在 "P_Id" 列建立 UNIQUE 限制,請使用下面的 SQL:
ALTER TABLE Persons
ADD UNIQUE (P_Id)
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
4.4撤銷 UNIQUE 限制
如需撤銷 UNIQUE 限制,請使用下面的 SQL:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
五、SQL CHECK限制
5.1SQL CHECK限制
CHECK限制用于限制列中的值的範圍。
如果對單個列定義CHECK限制,那麼該列隻允許特定的值。
如果對一個表定義CHECK限制,那麼這個限制将基于行中其他列的值在特定的列中對值進行限制。
5.2CREATE TABLE時的SQL CHECK限制
下面的SQL在“Persons”表建立時在“P_Id”列上建立CHECK限制.CHECK限制規定“P_Id”列必須包含大于0的整數。
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如需命名CHECK限制,并定義多個列的CHECK限制,請使用下面的SQL文法:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)
5.3ALTER TABLE時的SQL CHECK限制
當表已被建立時,如需在“P_Id”列建立CHECK限制,請使用下面的SQL:
ALTER TABLE Persons
ADD CHECK (P_Id>0)
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
5.4撤銷CHECK限制
如需撤銷CHECK限制,請使用下面的SQL:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
六、SQL NOT NULL 限制
在預設的情況下,表的列接受 NULL 值。
6.1SQL NOT NULL 限制
NOT NULL 限制強制列不接受 NULL 值。
NOT NULL 限制強制字段始終包含值。這意味着,如果不向字段添加值,就無法插入新記錄或者更新記錄。
下面的 SQL 強制 "P_Id" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
今天剛學到的。。。