SQL 约束

一、SQL 约束(Constraints

  • SQL 约束用于规定表中的数据规则。

如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

1.1. SQL CREATE TABLE + CONSTRAINT 语法

CREATE TABLE table_name
(
column_name1 data_type(sizeconstraint_name,
column_name2 data_type(sizeconstraint_name,
column_name3 data_type(sizeconstraint_name,
....
);

1.2. SQL 中,我们有如下约束:

  1. NOT NULL - 指示某列不能存储 NULL 值。
  2. UNIQUE - 保证某列的每行必须有唯一的值。
  3. PRIMARY KEY - NOT NULL UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  4. FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  5. CHECK - 保证列中的值符合指定的条件。
  6. DEFAULT - 规定没有给列赋值时的默认值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

例如:

 

 

  • SQL NOT NULL 约束

2.1 NOT NULL 约束强制列不接受 NULL 值。NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

 

2.2 实例

CREATE TABLE Persons ( ID int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255) NOT NULL,

Age int );

 

 

2.3在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示:

实例:ALTER TABLE Persons MODIFY Age int NOT NULL;

 

2.4 在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束如下所示:

ALTER TABLE Persons MODIFY Age int NULL;

 

 

 

 

  • SQL UNIQUE 约束

3.1 UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

 

3.2 下面的 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)
)

 

3.3 如需命名 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)
)

 

 

3.4 当表已被创建时,如需在 "P_Id" 列创建 UNIQUE 约束,请使用下面的 SQL

ALTER TABLE Persons
ADD UNIQUE (P_Id)

 

3.5 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

 

 

 

3.6 如需撤销 UNIQUE 约束,请使用下面的 SQL

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

 

四、SQL PRIMARY KEY约束

4.1 PRIMARY KEY约束唯一标识数据库表中的每条记录。

1)主键必须包含唯一的值。

2)主键列不能包含NULL值。

3)每个表都应该有一个主键,并且每个表只能有一个主键。

 

4.2 下面的SQL表创建时在“P_Id”列上创建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)
)

 

 

4.3 如果命名PRIMARY KEY约束,并定义多个列的PRIMARY KEY约束,请使用下面的SQL语法:

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)
)

注释:在上面的实例中,只有一个主键PRIMARY KEYpk_PersonID)。然而,pk_PersonID的值是由两个列(P_IdLastName)组成的。

 

4.4 当表已被创建时,如需在“P_Id”列创建PRIMARY KEY约束,请使用下面的SQL

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)

 

4.5 如果命名PRIMARY KEY约束,并定义多个列的PRIMARY KEY约束,请使用下面的SQL语法:

 

4.6 如需撤销PRIMARY KEY约束,请使用下面的SQL

ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID

 

 

 

五、 SQL FOREIGN KEY约束

 

5.1 一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)

让我们通过一个实例来解释外键。请看下面两个表:

 

请注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。

"Persons" 表中的 "P_Id" 列是 "Persons" 表中的 PRIMARY KEY

"Orders" 表中的 "P_Id" 列是 "Orders" 表中的 FOREIGN KEY

FOREIGN KEY 约束用于预防破坏表之间连接的行为。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

5.2 下面的 SQL "Orders" 表创建时在 "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)
)

 

5.3  如需命名 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)
)

 

 

5.4  "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

 

 

 

 

5.5 如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

 

 

5.6 如需撤销 FOREIGN KEY 约束,请使用下面的 SQL

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

 

 

 

六、SQL CHECK 约束

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

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

 

6.2下面的 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)
)

 

 

6.3 如需命名 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')
)

 

6.4  当表已被创建时,如需在 "P_Id" 列创建 CHECK 约束,请使用下面的 SQL

ALTER TABLE Persons
ADD CHECK (P_Id>0)

 

6.5 如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

 

6.6 如需撤销 CHECK 约束,请使用下面的 SQL

ALTER TABLE Persons
DROP CONSTRAINT chk_Person

 

七、 SQL DEFAULT 约束

7.1 DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新记录。

 

7.2 下面的 SQL "Persons" 表创建时在 "City" 列上创建 DEFAULT 约束:

CREATE TABLE Persons

(

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255) DEFAULT 'Sandnes'

)

 

7.3 当表已被创建时,如需在 "City" 列创建 DEFAULT 约束,请使用下面的 SQL

ALTER TABLE Persons
ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City

 

7.4 如需撤销 DEFAULT 约束,请使用下面的 SQL

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值