SQL 约束(Constraints)

SQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过 create table 语句),或者在表创建之后规定(通过 alter table 语句)。

create table + constraint 语法

create 

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

接下来,我们依次给大家分享每一种约束。

Sql not null 约束

在默认的情况下,表的列接受 NULL 值。not null 约束强制列不接受 NULL 值。not null 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

下面的 SQL 强制 "PersonID" 列、 "Name" 列以及 "Address" 列不接受 NULL 值:

create 

添加 not null 约束

在一个已创建的表的 "City" 字段中添加 not null 约束如下所示: 实例

alter 

删除 not null 约束

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

alter 

注意:在添加和删除not null约束,我用change和modify命令始终报错,这是因为我用的是sql server数据库,而change和modify命令是在my sql 和oracle下才能用的语法。

Sql unique 约束

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

create table 时的 unique 约束

下面的 SQL 在 "Persons" 表创建时在 "PersonId" 列上创建unique 约束:

MySQL:

create 

SQL Server / Oracle / MS Access:

create 

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

MySQL / SQL Server / Oracle / MS Access:

create 

alter 时的 unique 约束

当表已被创建时,如需在 "PersonID" 列创建unique 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

alter 

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

MySQL / SQL Server / Oracle / MS Access:

alter 

撤销 unique 约束

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

MySQL:

alter 

SQL Server / Oracle / MS Access:

alter 

primary key 约束

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

create table 时的 primary key 约束

下面的 SQL 在 "Persons" 表创建时在 "PersonID" 列上创建 primary key 约束:

MySQL:

create 

SQL Server / Oracle / MS Access:

create 

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

MySQL / SQL Server / Oracle / MS Access:

create 

注释:在上面的实例中,只有一个主键 primary key(pk_PersonID)。然而,pk_PersonID 的值是由两个列(PersonID和 Name)组成的。

alter table 时的 primary key 约束

当表已被创建时,如需在 "PersonId" 列创建 primary key 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

alter 

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

MySQL / SQL Server / Oracle / MS Access:

alter 

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

撤销 primary key 约束

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

MySQL:

alter 

SQL Server / Oracle / MS Access:

alter 

foreign key 约束

一个表中的 foreign key 指向另一个表中的 unique key(唯一约束的键)。 让我们通过一个实例来解释外键。请看下面两个表:

Persons 表:

Orders表:

请注意: - Orders"表中的 "PersonId" 列指向 "Persons" 表中的 "PersonId" 列。 - "Persons" 表中的 "PersonId" 列是 "Persons" 表中的 primary key。 - "Orders" 表中的 "PersonId" 列是 "Orders" 表中的 foreign key。 - foreign key约束用于预防破坏表之间连接的行为。 - foreign key约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

create table 时的foreign key 约束

下面的 SQL 在 "Orders" 表创建时在 "PersonId" 列上创建 foreign key 约束:

MySQL:

create 

SQL Server / Oracle / MS Access:

create 

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

MySQL / SQL Server / Oracle / MS Access:

create 

alter table时的foreign key约束

当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 foreign key约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

alter 

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

MySQL / SQL Server / Oracle / MS Access:

alter 

撤销foreign key约束

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

MySQL:

alter 

SQL Server / Oracle / MS Access:

alter 

check 约束

check 约束用于限制列中的值的范围。如果对单个列定义 check 约束,那么该列只允许特定的值。如果对一个表定义 check 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

create table 时的check 约束

下面的 SQL 在 "Persons" 表创建时在 "PersonId" 列上创建 check 约束。check 约束规定 "PersonId" 列必须只包含大于 0 的整数。

MySQL:

create 

SQL Server / Oracle / MS Access:

create 

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

MySQL / SQL Server / Oracle / MS Access:

create 

alter table 时的check 约束

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

MySQL / SQL Server / Oracle / MS Access:

alter 

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

MySQL / SQL Server / Oracle / MS Access:

alter 

撤销 check 约束

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

SQL Server / Oracle / MS Access:

alter 

MySQL:

alter 

Sql default 约束

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

create table 时的default 约束

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

My SQL / SQL Server / Oracle / MS Access:

create 

通过使用类似getdata()这样的函数,default 约束也可以用于插入系统值:

create 

alter table 时的default 约束

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

MySQL:

alter 

SQL Server / MS Access:

alter 

Oracle:

alter 

撤销 default 约束

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

MySQL:

alter 

SQL Server / Oracle / MS Access:

alter 

postgre sql 括字段_SQL-约束(cnostraints)相关推荐

  1. postgre sql 括字段_【技术干货】30个最适合初学者的SQL查询

    毫无疑问,SQL或结构化查询语言是最流行的编程语言之一,尤其是因为它具有访问和修改数据库中数据的功能.SQL与数据库接口的基本用法是其流行的最重要原因. 关于SQL的最基本方面之一就是查询.基本上,S ...

  2. Postgre SQL修改字段类型语法

    最近有用到Postgre SQL,网上有些写法不能成功修改字段类型,这里记录一下 整体语法 ALTER table 表名 ALTER COLUMN 字段名 type 字段类型 USING 字段名::字 ...

  3. java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?

    java将json数据解析为sql语句?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想起那杯水时,可惜它已经变得冰冷刺骨. 图片中是json数据,每个数据的开头都有表名称,操作类型 ...

  4. sql的外键约束和主键约束_SQL主键约束用示例解释

    sql的外键约束和主键约束 A primary key is a column or a set of columns that uniquely identifies each row in a t ...

  5. sql 拼接int类型的字段_SQL 基础教程—第一章:4. 表的创建

    第四节:表的创建 1.1 数据库的创建 创建表之前,需要先创建一个用来存储表的数据库,使用: create 比如我们要创建一个名称为 shop 的数据库,则 create database shop; ...

  6. sql的外键约束和主键约束_SQL约束

    sql的外键约束和主键约束 SQL | 约束条件 (SQL | Constraints) Constraints are the guidelines implemented on the infor ...

  7. sql删除字段约束 删除字段

    1 /*******sql删除字段约束 删除字段**********/ 2 DECLARE @table NVARCHAR(50);---定义表 3 DECLARE @cloumn NVARCHAR( ...

  8. mysql sql语句编码_SQL语句实用例子 MySQL编码设置

    SQL语言包含4个部分: ★ 数据定义语言(DDL),例如:CREATE.DROP.ALTER等语句. ★ 数据操作语言(DML),例如:INSERT(插入).UPDATE(修改).DELETE(删除 ...

  9. SQL学习之check约束

    目录 参考源 SQL check 约束 示例数据 create table 添加 check 约束 多个字段添加约束 给 check 约束命名 alter table 时的 SQL check 约束 ...

最新文章

  1. android 高通平台有前途吗,华为鸿蒙计划要适配高通平台了,可以告别安卓搭载鸿蒙OS了?...
  2. php会员中心模板,会员中心模板
  3. java c3p0 连接 mysql_Java使用C3P0数据源链接数据库
  4. [翻译] ObjectAL for iPhone and Mac(持续更新)
  5. css3制作一个漂亮的按钮
  6. 计算机网络实验设计应用题,计算机网络实验三实验报告.doc
  7. (Java集合框架)List接口
  8. TCP的三次握手与四次挥手图文
  9. 数据结构 2-3-3 循环链表
  10. 英伟达新GPU发布:快到飞起,快到老黄瞬间学会了跳舞
  11. 1035. 插入与归并(25)-浙大PAT乙级真题
  12. 直指Adobe的龌龊行径
  13. python3数据库框架_Python3 MySQL 数据库连接:安装pymysql(mysql数据库驱动), sqlalchemy(ORM框架)。...
  14. 常用开源 SLAM 方案
  15. c/c++再学习:C与Python相互调用
  16. 热门的Linux运维管理面板全面汇总
  17. Excel图表设置X轴位置为最底部
  18. 角谷猜想(次数+过程)
  19. linux终端如何连接wifi,如何在 Linux 终端中连接使用 WiFi?
  20. _motz_ forum.php_开启模块化大门 moto z体验

热门文章

  1. Laravel项目上线部署
  2. linux 安装python MySQLdb
  3. cannot find module 'cordova-common'
  4. 关东升的《从零开始学Swift》3月9日已经上架
  5. NGUI 学习笔记实战——制作商城UI界面
  6. AS4下搭建cacti
  7. 在OperaMasks中使用ELite和JRuby动态语言的秘笈
  8. CentOS 配置epel源
  9. CCNA 之 三 TCP/IP 及 子网划分
  10. centos 6.5下编译安装、配置高性能服务器Nginx