天天看點

SQL Server 表的管理_關于完整性限制的詳解(案例代碼)SQL Server 表的管理之_關于完整性限制的詳解一、概述:二、SQL PRIMARY KEY限制三、SQL FOREIGN KEY限制四、SQL UNIQUE 限制五、SQL CHECK限制六、SQL NOT NULL 限制

原文: 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)
)
      

今天剛學到的。。。