SQL 约束
时间:2018-11-15 17:48:20 来源:igfitidea点击:
在本教程中,我们将了解自动保证数据完整性的SQL约束。
SQL 约束介绍
约束或SQL约束是指在执行插入、更新和删除操作时定义哪些数据值是有效的规则。
当存在约束时,SQL 引擎会拒绝所有违反规则的事务,因此,约束可以帮助您保证数据的完整性。
ANSI SQL提供四种类型的约束,包括主键(PRIMARY KEY)、惟一性(UNIQUE)、外键(FOREIGN KEY)和检查(CHECK)。
SQL的约束范围
SQL约束可以应用在表级或者列级上。
- 表级约束:声明应用于一个或多个列的表级约束。表级约束是独立于列定义声明的。通常在CREATE TABLE语句的末尾声明表级约束。
- 列级约束:在为表定义列时声明列级约束。列级约束特别应用于它所连接的列。
声明的SQL约束
下面是SQL约束的一般语法:
CONSTRAINT [name] type [(column1, column2…)] [predicate] [deferment] [deferment_timing]
让我们详细地看一下语法:
- name:是约束的名称。这是一个可选的部分。如果您省略了约束的名称,数据库系统将自动为您创建一个名称。在某些数据库系统中,您还可以在声明约束时省略CONSTRAINT关键字。
- type:是有效的约束类型之一,如主键(PRIMARY KEY)、惟一性(UNIQUE)、外键(FOREIGN KEY)和检查(CHECK)。如果数据库系统提供其他特定类型,则可以在这里指定。
- column n1, column n2 ...:将约束附加到一个或多个列上。
- predicate:仅适用于检查(CHECK)约束。
- deferment:DEFERRABLE或者NOT DEFERRABLE之一,表示约束是否可延迟。如果约束是可延迟的,则数据库系统在事务结束时检查规则。当声明不可延迟的约束时,数据库系统将检查事务中的每个SQL语句的规则。
- deferment_timing:如果约束是可延迟的,则可以使用 INITIALLY IMMEDIATE或INITIALLY DEFERRED来指定检查规则的默认时间。
如果deferment_timing 设置为INITIALLY IMMEDIATE,则在每个语句之后检查约束。这是deferment_timing的默认值
如果deferment_timing 设置为INITIALLY DEFERRED,那么约束只在事务结束时才会被检查。
请注意,不同的数据库系统实现的约束各不相同,因此请阅读相关的数据库文档。