第五章 数据库完整性

5.1数据库完整性

数据库完整性的两个要素

  • 数据的正确性:数据符合现实世界语义,反应当前实际状况

  • 数据的相容性:同一对象在不同关系表中的数据时符合逻辑的

学生学号一定唯一正确性
性别只能是男或者女正确性
本科生年龄为14~50的整数正确性
学生的院系必须是学校已经成立的,课程必须是学校已经开设的相容性

5.2实体完整性

  • 实体完整性(主键不能重复+主属性非空)

  • 表级约束条件:定义在表的后面

  • 列级约束条件:定义在列的后面

  • 单属性的码两种定义都可以,多属性的码只能定义为表级约束条件

  • 违反实体完整性:拒绝

  • DBMS自动建立的主索引:稀疏索引,类似分块查找的索引

5.3参照完整性

定义:一个表的属性要参照另一个表中对应属性的值

数据库完整性的问题_2.定义参照完整性(显示定义:no action, cascade, set null);-CSDN博客

优先级:被参照表大于参照表,这样理解即可理解这张表,默认全部为拒绝

显示说明参照完整性,在表级约束条件后面加上ON DELETE CASCADE等说明

5.4用户定义的完整性

方式一:在定义表的时候自定义完整性,有表级约束方式和列级约束条件(在定义属性的后面加上CHECK子句)

方式二:使用完整性约束命名子句

CONSTRAINT <完整性约束条件名><完整性约束条件>

<完整性约束条件>包括:NOT NULL, PRIMARY KEY , CHECK等短语

修改表中的约束:ALTER TABLE ADD(DROP) CONSTRAINT <约束名> <约束条件>

用户定义的完整性只能先删后加,不能修改

5.5断言 ASSERTION

  • 用途:断言语句,制定更加一般性的约束(例如设计多个表或聚集操作的比较复杂的完整性约束)
  • 违反处理:拒绝
  • 若断言很复杂,则检测和维护的开销很高,使用时应该注意
  • 语句格式
    1. 创建:CREATE ASSERTION <断言名><CHECK子句>
    2. 删除:DROP ASSERTION <断言名>
//限制数据库课程每门课程最多60名学生选修
CREATE ASSERION ASSE_SC_CNUM1
CHECK (60 >= ALL(select count(*) from SC group by cno))

5.6触发器 Trigger

  • 定义:用户定义在关系表上的一类由事件驱动的特殊过程,触发器保存在数据库服务器中,任何用户的对表的增、删、改操作均由服务器自动激活相应的触发器
  • 表的拥有者或DBA才能在表上创建触发器,谁拥有谁能删除
  • 触发器名和表名必须在同一模式下,一个数据库中触发器的名字是唯一的
  • 触发器只能定义在表上,不能定义在视图上
  • 触发器种类
    • 行级触发器:ROW,对每一行执行,可以使用NEW和OLD引用值
    • 列级触发器:STATEMENT,只执行一次,对单一元组执行,不能引用值
  • 如果触发动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响的其他对象不发生任何变化

5.7存储过程 Procedure

  • 存储过程是存储在服务器上的一组预编译的SQL语句
  • 每个存储过程执行时都向调用方返回一个整数,即返回代码;如果没有显示设置返回代码的值,则返回代码为0表示存储过程成功执行
  • 存储过程类似C语言中函数,可以主动调用,有返回值,被预编译
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值