CONSTRAINTS 约束

介绍

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

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

约束可以在创建表时规定(通过 CREATE TABLE 语句);

或者在表创建之后规定(通过 ALTER TABLE 语句)。

语法(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 中,有以下6个约束:

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

NOT NULL 约束

介绍

在默认的情况下,表的列 是接受 NULL 值的,但NOT NULL约束强制该列不接受 NULL值,强制字段始终包含非空值。如果不向字段添加值,就无法插入或更新记录。

实例1 创建表时定义not null约束

下面的 SQL 语句强制 "ID" 列、 "LastName" 列以及 "FirstName" 列不能为NULL。CREATE TABLE Persons (ID          int NOT NULL,LastName    varchar(255) NOT NULL,FirstName   varchar(255) NOT NULL,Age         int
);

实例2 在已经存在的表中添加 NOT NULL 约束

在已创建的Persons表的 "Age" 字段中 添加 NOT NULL 约束ALTER TABLE Persons
MODIFY Age int NOT NULL;

实例3 删除 NOT NULL 约束

在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束ALTER TABLE Persons
MODIFY Age int NULL;

UNIQUE 约束

介绍

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

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

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

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

实例1 创建表时的UNIQUE约束

CREATE TABLE Persons
(
P_Id        int NOT NULL UNIQUE,       -- 直接说明了是UNIQUE --
LastName    varchar(255) NOT NULL,
FirstName   varchar(255),
Address     varchar(255),
City        varchar(255)
);
命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束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)
);

实例2 更改表时的UNIQUE约束

表Persons已经存在,需要在P_ID列创建UNIQUE约束
ALTER TABLE Persons
ADD UNIQUE (P_ID);
表Persons已经存在,需要重命名UNIQE 约束,并定义多个列的约束
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID (P_ID, LastName);

实例3 撤销UNIQUE约束

ALTER TABLE Persons
DROP CONSTRAINT uc_Person_ID;

PRIMARY KEY (主键) 约束

介绍

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

实例1 创建表时的PRIMARY 约束

在 "Persons" 表创建时在 "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)
);
在建表的同时命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束
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)
);

实例2 更改表时的 PRIMARY 约束

表Persons 已经被创建,需在 "P_Id" 列创建 PRIMARY KEY 约束
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id);
需要命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName);

注意事项:使用 ALTER TABLE 语句添加主键的时候,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

实例3 撤销 PRIMARY KEY 约束

ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID;

FOREIGN KEY (外键约束)

介绍

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

实例1 创建表时的 FOREIGN KEY 约束

下面的 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) -- 外键定义 --
);
命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束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)
);

实例2 修改表时的 FOREIGN KEY 约束

已经创建"Orders"表,如果需要在 "P_Id" 列创建 FOREIGN KEY 约束ALTER TABLE Orders
ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id); -- 外键定义 --
命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES Persons(P_Id);

实例3 撤销 FOREIGN KEY 约束

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

在创建外键约束时,必须先创建外键约束所依赖的表,并且该列为该表的主键

notes:

  • 子表:谁创建外键谁就是子表

  • 父表:这个外键所依赖的表

CHECK 约束

介绍

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

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

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

实例1 创建表时的 CHECK 约束

要求: 创建"Persons" 时,在 "P_Id" 列上创建 CHECK 约束。
CHECK 约束规定 "P_Id" 列只能存在大于 0 的整数。
CREATE TABLE Persons
(
P_Id        int             NOT NULL CHECK (P_Id > 0), -- check定义 --
LastName    varchar(255)    NOT NULL,
FirstName   varchar(255),
Address     varchar(255),
City        varchar(255)
);
命名 CHECK 约束,并定义多个列的 CHECK 约束
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 = 'QingDao')
)

实例2 修改表时的 CHECK 约束

Person表已创建,在 "P_Id" 列创建 CHECK 约束
ALTER TABLE Persons
ADD CHECK (P_Id > 0);
命名 CHECK 约束,并定义多个列的 CHECK 约束
ALTER TABLE Persons
ADD CHECK chk_Person CHECK (P_Id > 0 AND City = 'Sandnes');

实例3 撤销 CHECK 约束

ALTER TABLE Persons
DROP CONSTRAINT chk_Person;

DEFAULT 约束

介绍

DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

实例1 创建表时的DEFAULT约束

创建"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 'QingDao' -- DEFAULT约束定义 --
);

实例2 创建表时的DEFAULT约束

Persons表已经被创建,在 "City" 列创建 DEFAULT 约束ALTER TABLE Person
MODIFY City DEFAULT 'QingDao';

实例3 创建表时的DEFAULT约束

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

sql学习-Constraints(约束)(primary key、 foreign key、check、default)相关推荐

  1. CHIL-ORACLE-主外键约束(primary key / foreign key)

    主键约束 要求主键列数据唯一,并且不允许为空 外键约束 用于量表建立关系,需要指定引用朱彪的那列(主表必须是主键)1.主键约束 ( primary key )--例如1:create table te ...

  2. mysql外键约束案例_SQLServer FOREIGN KEY外键约束讲解及使用实例

    FOREIGN KEY约束添加规则 1.外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列. 2.如果在 FOREIGN KEY 约束的列中输入非 NU ...

  3. mysql 导入数据 1215,导入sql出现:#1215 – Cannot add foreign key constraint错误的解决办法...

    今天在数据库后台导入一个mysql文件时,出现了:1215 – Cannot add foreign key constraint这样的错误提示. 百度了一下,网友们给出的解决办法一般是这样的: 外键 ...

  4. SQL学习之foreign key约束

    目录 参考源 SQL foreign key 约束 FOREIGN KEY 作用 create table 时的 SQL foreign key 约束 MySQL SQL Server / Oracl ...

  5. SQL FOREIGN KEY 约束

    一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. 让我们通过一个例子来解释外键.请看下面两个表: "Persons" 表: "Orders& ...

  6. 外键约束(foreign key) [MySQL][数据库]

    外键约束(FOREIGN KEY(字段) REFERENCES 主表名(字段)) 外键约束的作用: 限定某个字段的引用完整性 我们之前在讲数据完整性的时候就提到过引用完整性 引用完整性(eg: 员工所 ...

  7. MySQL外键约束-foreign key

    一.什么是外键 外键也称之为外键约束 :  关键字  foreign key 外键:外面的键,一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键. 外键所在的表称之为子表(附表) ...

  8. SQL FOREIGN KEY

    一个表中的FOREIGH KEY 指向另一个表中的PRIMARY KEY. 通过实例来解释外键.请看下面两个表: 注意: ·"Orders"表中的"P_Id"列 ...

  9. mysql一对一外键约束_MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表...

    我们在同一数据库创建的表时候,很多时候会出现相同数据的冗余问题,也就是说几个id会有一个或者同n个相同字段,这样就导致数据表结构数据重复冗余, 冗余还无所谓,关键是如果我要改其中一个相同的字段信息,其 ...

最新文章

  1. iis web.config 配置 经典模式_部署IIS+PHP+Oracle环境
  2. ctime、mtime、atime
  3. Python入门IDE选择
  4. 【采用】反欺诈之血缘关系分析和犯罪传导监测 - 知识图谱
  5. 计算机模拟虫洞,Canvas 3D虫洞模拟
  6. C++(七)——多态
  7. python的socket编程执行顺序_Python篇-Socket网络编程
  8. 把有约束最优化问题转化为无约束最优化问题之罚函数法
  9. C++模板中关键字typename与class的区别
  10. 关于Redis启动时报权限不够(-bash: /usr/local/bin/redis-server: Permission denied)
  11. .net工作流框架,拖拽式表单设计,仿钉钉流程设计
  12. UE4制作一个蓝图的多功能鼠标宏(一)——单击、双击和取消点击
  13. 河南理工计算机课程表,河南理工大学张威的课程表.doc
  14. Centos 8 安装 Openbravo 之安装 ant
  15. python调用百度地图、通过经纬度定位_python调用百度地图API得到两地经纬度计算直线距离...
  16. C#加密和解密PDF文件
  17. 拷机测试需要多久_软件测试培训多久能学会?这六个阶段是要有的
  18. 抢滩大数据金融“蓝海”
  19. 为什么 Google 总是在不断地关闭产品呢?
  20. 在某点邻域有定义_z = f(x, y) 在点 (x0, y0) 的某一邻域内有定义, 当x从x0 取.PPT...

热门文章

  1. 历史要开一个人的玩笑,多大的英雄都没法子。
  2. 手机如何升降鸿蒙系统,鸿蒙系统现身,搭配升降式镜头和鸿鹄芯片,你以为是手机?...
  3. 一个农村小姑娘的麻辣作文 (转)
  4. 一个农村小姑娘的麻辣作文
  5. linux 恢复修改文件内容,Linux备份及恢复及Linux文件权限详解
  6. Linux爱情故事之如何以不一样的姿势(ssh)进入她的心
  7. Ufida U8v10.1 安装到sqlserver2008R2 故障转移集群
  8. Linux中通过v4l2框架获取摄像头的能力的方法
  9. 抖音 关注动画 android,Android仿抖音、微视关注动画
  10. 易达项目第一次冲刺周期第四天