今天在學習的時候,突然對SQL約束的概念有點模糊,現在學習完記下來。SQL約束有五大約束
1、主鍵約束(Primay Key Coustraint) 唯一性,非空性
2、唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個
3、檢查約束 (Check Counstraint)對該列數據的範圍、格式的限制(如:年齡、性別等)
4、默認約束 (Default Counstraint)該數據的默認值
5、外鍵約束 (Foreign Key Counstraint)需要建立兩表間的關係並引用主表的列
,非空性,具體用法如下:
Create Table Persons//非空性 id和name值必須非空否則不得寫入
{
id int not null,
name varchar(255) not null,
adress varchar(255)
}
唯一約束:UNIQUE 約束唯一標識數據庫表中的每條記錄。(也就是數據值必須唯一), PRIMARY KEY 約束均爲列或列集合提供了唯一性的保證。(PRIMARY KEY爲主鍵約束),使用如下圖
//當表格還未創建的時候
CREATE TABLE Persons//對Id_P進行約束(單個約束語法)
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
CREATE TABLE Persons//對Id_P LastName進行約束,約束名爲uc_PersonID(也就是多個約束語法)
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
//當表格創建的時候
ALTER TABLE Persons//單個約束
ADD UNIQUE (Id_P)
ALTER TABLE Persons//多個約束,意思跟上面一樣
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
//刪除約束 uc_PersonID爲之前做的約束名
ALTER TABLE Persons
DROP INDEX uc_PersonID
主鍵約束 約束唯一標識數據庫表中的每條記錄。主鍵必須包含唯一的值。主鍵列不能包含 NULL 值。使用方式如下:
//當未創建表時
CREATE TABLE Persons//單個約束,將Id_P進行主鍵約束
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
PRIMARY KEY (Id_P)
)
CREATE TABLE Persons//多個約束,將Id_P,LastName進行主鍵約束,約束名爲pk_PersonID
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)
//當表格已創建時
ALTER TABLE Persons//將Id_P設置爲主鍵
ADD PRIMARY KEY (Id_P)
ALTER TABLE Persons//將Id_P,LastName設置爲主鍵,主鍵名pk_PersonID
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
//撤銷約束
ALTER TABLE Persons//撤銷單個約束
DROP PRIMARY KEY
ALTER TABLE Persons//撤銷一組約束
DROP CONSTRAINT pk_PersonID
外鍵約束 一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY,代碼如下:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
"Orders" 表:
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
請注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 約束用於預防破壞表之間連接的動作。
FOREIGN KEY 約束也能防止非法數據插入外鍵列,因爲它必須是它指向的那個表中的值之一。
//當未創建表時
CREATE TABLE Orders//這段語句中Id_O設置爲主鍵 Id_P爲外鍵對應Persons表中的Id_P主鍵
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
CREATE TABLE Orders// Id_P爲外鍵對應Persons表中的Id_P主鍵,別名爲fk_PerOrders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
//當已創建表時
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
//撤銷約束
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders