数据库完整性

数据库完整性包括实体完整性、参照完整性和用户定义的完整性,确保数据的正确性和相容性。实体完整性规定主键不可为空,参照完整性约束外键。用户定义的完整性允许设置特定的约束条件,如非空、唯一和检查表达式。此外,断言提供了一种全局约束机制,而触发器则在特定事件发生时执行预定义的动作,支持复杂的业务逻辑。
摘要由CSDN通过智能技术生成

数据库的完整性是指数据的正确性和相容性。

实体完整性

保证实体可区分,主码(PRIMARY KEY)不可取空值。

参照完整性

对外码(FOREIGN KEY)的约束。
外码可以取空值或者等于原基本表中的某一元组的主码值。

用户定义的完整性

属性上的约束条件

  • 列值非空(NOT NULL)
  • 列值唯一(UNIQUE)
  • 检查列值是否满足一个条件表达式(CHECK 短语)

用CHECK短语指定列值应该满足的条件
例如:CHECK (Ssex IN (‘男’, ‘女’)) //检查性别是否为男或女,否则非法数据

断言

通过声明性断言来指定更具一般性的约束。断言创建以后,任何对段严重所涉及关系的操作都会出发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行。

  1. 创建断言的语句格式
CREATE ASSERTION <断言名><CHECK子句>

CHECK子句中的约束条件与WHERE子句的条件表达式类似。
eg:限制每一门课程最多60人选修

CREATE ASSERTION ASSE_SC_CNUM1
     CHECK(60 >= ALL(SELECT count(*)
                     FROM SC
                     GROUP BY Cno)
                     );
  1. 删除断言
DROP ASSERTION <断言名>;

触发器

触发器又叫做事件-条件-动作(event-condition-action)规则。

建立触发器:
CREATE TRIGGER <触发器名>
{BEFORE|AFTER} <触发事件> ON <表名>
REFERENCING NEW|OLD ROW AS <变量>  /*REFERENCING指出引用的变量*/
FOR EACH{ROW|STATEMENT}
[WHEN <触发条件>]<触发动作体>

触发器按照所触发动作的间隔尺寸可以分为行级触发器(FOR EACH ROW)和语句级触发器(FOR EACH STATEMENT)。
在触发事件发生后,当且仅当触发条件为真时执行触发动作体,若省略了WHEN子句,则触发动作体立即执行。

激活触发器

同一个表上多个触发器激活时遵照如下的执行顺序:

  1. 执行该表上的BEFORE触发器
  2. 激活触发器的SQL语句
  3. 执行该表上的AFTER触发器
    对于同一类型触发器,按照触发器创建的时间先后执行。

删除触发器

DROP TRIGGER <触发器名> ON <表名>;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值