【SQL高级(六)】【SQL NOT NULL 约束+SQL UNIQUE 约束+SQL PRIMARY KEY 约束+SQL FOREIGN KEY 约束】

上一篇:【SQL高级(五)】【SQL CREATE DATABASE 语句+SQL CREATE TABLE 语句】

++++++++++++++++++开始线++++++++++++++++++

一、 SQL 约束(Constraints)

SQL 约束用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。

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

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

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

1.1 SQL NOT NULL 约束

在默认的情况下,表的列接受 NULL 值。

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

=====================================
强制 “ID” 列、 “LastName” 列以及 “FirstName” 列不接受 NULL 值
在这里插入图片描述
在这里插入图片描述

1.1.1 添加 NOT NULL 约束

在一个已创建的表的 “Age” 字段中添加 NOT NULL 约束
在这里插入图片描述

1.1.2 删除 NOT NULL 约束

在一个已创建的表的 “Age” 字段中删除 NOT NULL 约束

在这里插入图片描述

1.2 SQL UNIQUE 约束

UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。

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

CREATE TABLE 时的 SQL UNIQUE 约束

1.2.1 创建表时创建UNIQUE约束

在 “Persons” 表创建时在 “P_Id” 列上创建 UNIQUE 约束:

MySQL

CREATE TABLE Persons
(P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
ddress varchar(255),
City varchar(255),
UNIQUE (P_Id) )

在这里插入图片描述

SQL Server / Oracle / MS Access:

 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 约束

MySQL / SQL Server / Oracle / MS Access:

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.2.2 已创建的表进行创建UNIQUE约束

当表已被创建时,如需在 “P_Id” 列创建 UNIQUE 约束

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD UNIQUE (P_Id)

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束

MySQL / SQL Server / Oracle / MS Access:

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

1.2.3 撤销 UNIQUE 约束

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

MySQL

ALTER TABLE Persons
DROP INDEX uc_PersonID;

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID;

1.3 SQL PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

1.3.1 CREATE TABLE 时的 SQL PRIMARY KEY 约束

下面的 SQL 在 “Persons” 表创建时在 “P_Id” 列上创建 PRIMARY KEY 约束:

MySQL

CREATE TABLE Persons
 (P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id))

SQL Server / Oracle / MS Access:

CREATE TABLE Persons
 (P_Id int NOT NULL PRIMARY KEY,
 LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255))

如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束

MySQL / SQL Server / Oracle / MS Access:

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 KEY(pk_PersonID)。然而,pk_PersonID 的值是由两个列(P_Id 和 LastName)组成的。

1.3.2 ALTER TABLE 时的 SQL PRIMARY KEY 约束

当表已被创建时,如需在 “P_Id” 列创建 PRIMARY KEY 约束

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)

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

MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

1.3.3 撤销 PRIMARY KEY 约束

MySQL:

ALTER TABLE Persons
DROP PRIMARY KEY

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID

1.4 SQL FOREIGN KEY 约束

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

在这里插入图片描述

FOREIGN KEY 约束用于预防破坏表之间连接的行为。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

1.4.1 CREATE TABLE 时的 SQL FOREIGN KEY 约束

在 “Orders” 表创建时在 “P_Id” 列上创建 FOREIGN KEY 约束

MySQL

CREATE TABLE Orders
(O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id))

SQL Server /Oracle / MS Access:

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 约束

MySQL / SQL Server / Oracle / MS Access:

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.4.2 ALTER TABLE 时的 SQL FOREIGN KEY 约束

当 “Orders” 表已被创建时,如需在 “P_Id” 列创建 FOREIGN KEY 约束
MySQL / SQL Server / Oracle / MS Access:

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

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束

MySQL / SQL Server / Oracle / MS Access:

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

1.4.3 撤销FOREIGN KEY 约束

如需撤销 FOREIGN KEY 约束

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

++++++++++++++++++结束线++++++++++++++++++
下一篇:【SQL高级(七)】【SQL CHECK 约束+SQL DEFAULT 约束】

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值