SQL 用户定义的完整性
本文最后更新于:2024年3月18日 凌晨
SQL 用户定义的完整性
- 用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求,目前的关系数据库管理系统都提供了定义和检验这类完整性的机制,使用了和实体完整性,参照完整性相同的技术和方法来处理它们,而不必由应用程序承担这一功能。
属性上的约束条件
属性上的约束条件的定义
在CREATE TABLE中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制,包括:
- 列值非空(NOT NULL)
- 列值唯一(UNIQUE)
- 检查列值是否满足一个条件表达式(CHECK短语)
不允许取空值
[例5.5]:在定义SC表时,说明Sno,Cno,Grade属性不允许取空值。
1 |
|
列值唯一
[例5.6]:建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码。
1 |
|
用CHECK短语指定列值应该满足的条件
[例5.7]:Student表的Ssex只允许取"男’或"女’
1 |
|
[例5.8]:SC表的Grade的值应该在0和100之间。
1 |
|
属性上约束条件的检查和违约条件
- 当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行。
元组上的约束条件
元组上约束条件的定义
- 与属性上约束条件的定义类似,在CREATE TABLE语句中可以用CHECK短语定义元组上的约束条件,即元组级的限制,同属性值限制相比,元组级的限制可以设置不同属性之间的取值相互约束条件。
[例5.9]:当学生的性别是男时,其名字不能以Ms.开头。
1 |
|
- 性别是女性的元组都能通过该项CHECK检查,因为Ssex='女"成立,当性别是男性时,要通过检查则名字一定不能以Ms.开头,因为Ssex='男"时,条件要想为真值,Sname NOT LIKE 'Ms.%'必须为真值。
元组上约束条件的检查和违约处理
当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约束条件是否被满足,如果不满足则操作被拒绝执行。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!