0%

SQL-约束

常用的约束

创建约束

  1. 创建表时指定约束
1
2
3
4
5
6
7
CREATE TABLE table_name
(
column_name1 data_type(size) constraints,
column_name2 data_type(size) constraints,
column_name3 data_type(size) constraints,
....
);
  1. 创建表后指定约束
1
2
3
4
5
6
ALTER TABLE Persons
ADD constraint_key;

-- 2. 添加一个多个列的 UNIQUE 约束,并命名
ALTER TABLE Persons
ADD CONSTRAINT constraint_name constraint_key;

删除约束

1
ALTER TABLE table_name DROP CONSTRAINT constraint_name;

NOT NULL 非空约束

在默认的情况下,表的列接受 NULL 值。
NOT NULL 约束强制列不接受 NULL 值。

1
2
3
4
5
6
7
8
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

UNIQUE 唯一约束

  • UNIQUE 约束唯一标识数据库表中的每条记录。
  • UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
  • PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
  • 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

添加唯一约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- 创建表时添加约束
-- 1. 定义列时,添加约束
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
-- 2. 定义好所有列后,添加约束,可添加一个多个列的约束
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)
);

-- 创建表后添加约束
-- 1. 添加约束
ALTER TABLE Persons
ADD UNIQUE (P_Id);

-- 2. 添加一个多个列的 UNIQUE 约束,并命名
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName);

撤销唯一约束

1
2
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

PRIMARY KEY 主键约束

主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

添加主键约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- 创建表时添加约束
-- 1. 定义列时,添加约束
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. 定义好所有列后,添加约束,可添加一个多个列的约束
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
);

-- 创建表后添加约束
-- 1. 添加约束
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id);
-- 2. 添加一个多个列的 PRIMARY KEY 约束,并命名
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName);

撤销主键约束

1
2
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID;

FOREIGN KEY 外键约束

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

添加外键约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- 创建表时添加约束
-- 1. 定义列时,添加约束
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
);
-- 2. 定义好所有列后,添加约束,可添加一个多个列的约束
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)
);

-- 创建表后添加约束
-- 1. 添加约束
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id);
-- 2. 添加一个多个列的 FOREIGN KEY 约束,并命名
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id);

撤销外键约束

1
2
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders;

DEFAULT 约束

添加默认约束

1
2
3
4
5
6
7
8
9
10
11
12
-- 创建表时添加约束
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
);
-- 创建表后添加约束
ALTER TABLE Persons
ADD CONSTRAINT DF_Persons_City DEFAULT('SANDNES') FOR City;

撤销默认约束

1
2
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

CHECK 约束

CHECK 约束用于限制列中的值的范围。

添加检查约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- 创建表时添加约束
-- 1. 定义列时,添加约束
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)
);
-- 2. 定义好所有列后,添加约束,可添加一个多个列的约束
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')
);

-- 创建表后添加约束
-- 1. 添加约束
ALTER TABLE Persons
ADD CHECK (P_Id>0);
-- 2. 添加一个多个列的 CHECK 约束,并命名
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes');

撤销检查约束

1
2
ALTER TABLE Persons
DROP CONSTRAINT chk_Person;