数据库的约束主要是为了保证数据的有效性,从而保证了数据的安全性。
约束定义数据库中的数据必须符合的某些属性,他们可以应用与列,整个表格,多个表格,或整个模式,可靠的数据库系统可以确保约束始终保持不变(除了可能在事务内部,对于所谓的延迟约束)。
1. 主键约束(Primary Key Constraint):
保证数据的唯一性,并且主键列数据不能为空(唯一性,非空性)。
添加主键约束(将id作为主键):
alter table 表名
add constraint 主键名 primary key(id)
2. 唯一约束(Unique Constraint):
保证数据的唯一性,唯一约束的列可以为空(唯一性,可以空,但只能有一个)。
添加唯一约束(身份证号唯一,因为每个人的都不一样):
alter table 表名
add constraint 唯一约束名 unique(IdentityCardNumber)
3. 检查约束(Check Constraint):
保证数据的有效性,让值在有效范围内取值,对该列数据的范围、格式的限制(如:年龄、性别等)
添加检查约束(对年龄加以限定:20-40之间,对性别加以限定:男或女):
alter table 表名
add constraint 检查约束名 check(age between 10 and 40)
alter table 表名
add constraint 检查约束名 check(sex = '男' or sex = '女')
4. 默认约束(Default Constraint):
保证数据的完整性,如果没有填入信息时,会使用默认信息填入,保证数据的完整性。
添加默认约束(如果地址不填,默认为“地址不详”):
alter table 表名
add constraint 默认约束名 default('地址不详') for address
5. 外键约束(Foreign Key Constraint):
需要建立两表间的关系并引用主表的列,保证数据的完整性,互相依赖的数据不能缺失。比如学生依赖班级表,班级表数据删除后,学生记录就没有了班级信息。
添加外键约束(主表info和从表order建立关系,关联字段:userId):
alter table 表名
add constraint 外键名 foreign key(order) references info(userId)
关于约束的其他操作:
删除约束
alter table 表名
drop constraint 约束名
关闭约束
alter table 表名
disable constraint 约束名 cascade
//如果没有被引用则不需CASCADE关键字
打开约束
alter table 表名
enable constraint 约束名
//注意:打开一个先前关闭的被引用的主键约束,并不能自动打开相关的外部键约束
注意:
-
添加主键约束会自动创建唯一索引。如果表中尚未创建 聚焦索引,则自动创建聚焦唯一索引。如果表中已存在聚焦索引,则自动创建非聚焦索引。
-
添加唯一约束会自动创建唯一索引。如果未在unique关键字后加上[nonclustered|clustered],则默认会创建非聚焦索引。