数据库的完整性

什么是数据库的完整性?

答:指的是数据的正确性和相容性。

引发数据库完整性原因?

答:不正当的操作,如输入错误,操作失误、程序处理失误等。

数据库完整性的作用?

答:1、防止和避免数据库中不合理数据的出现 2、尽可能自动防止DB中语义不合理现象。

什么是数据库的完整性约束条件?

答:数据库中的数据应满足的语义约束条件。

DBMS的完整性控制机制应具有哪三个方面的功能?

答:定义功能(提供完整性约束条件)、检查功能(看是否违背约束条件)、违约处理功能。

数据库的完整性

完整性约束条件分类:

  • 按约束对象分类:
    • 域完整性约束条件:施加于某一列
    • 关系完整性约束条件:同时施加于多列
  • 按约束来源分类:
    • 结构约束:如主键、值是否相等、值是否为空、函数依赖等
    • 内容约束:用户自定义,关心元组或列的取值范围
  • 按约束状态分类:
    • 静态约束:DB在任意时刻都应满足的约束条件
    • 动态约束:DB在一状态变成另一状态时应满足的约束条件

完整性约束的一般形式:(O,P,A,R),object约束对象、谓词条件(什么样的条件)、触发条件(什么时候检查)、response响应动作。

SQL实现约束:

  • 静态约束——Create Table:定义关系模式、定义完整性约束、定义物理存储特性;
    • 定义关系模式:定义列名和数据类型
    • 定义完整性约束:
      • 列完整性(针对列):约束间空格分开
        • not null
        • unique
        • primary key
        • check (列值满足的条件,条件只能使用列当前值)
        • references 外表(外表列名) on delete cacsade(set null)
        • constraint 约束名 上述约束
      • 表完整性(针对多列):约束间逗号分开
        • unique (列名1,列名2)
        • primary key (列名1,列名2)
        • check (多列值满足的条件)
        • foreign key (列名1,列名2)references 外表(列名1,列名2) on delete cacsade(set null)
        • constraint 约束名 上述约束

SQL实现撤销约束——Alter table 表名:

  • 增加列:Alter table table_name add 列名 类型 列约束,表约束
  • 删除列:Alter table table_name drop column 列名
  • 修改列约束:Alter table table_name modify 列名 类型 列约束,表约束
  • 撤销指定约束名:Alter table table_name drop constraint 约束名
  • 撤销指定约束:Alter table table_name drop primary key

什么是断言?

答:一个断言就是一个谓词表达式,它表达了希望数据库总能满足的条件,表约束和列约束就是一种特殊的断言,当一个断言创建完成后,系统将会检测其有效性,并在每一次更新时测试更新是否违背该断言。

SQL实现断言:Create Assertion 断言名 Check (形同Where后的条件)

什么是触发器?

答:是一种过程完整性约束,是一段程序,该程序可以在特定的时刻被自动触发。

SQL实现触发器?

答: Create Trigger 触发器名 After|Before 触发事件 on 表名 [referencing new 别名,old 别名]For Each Row [when (条件)] begin 执行语句 end;

  • before:事件发生之前触发
  • after:事件发生之后触发
  • new old:前一个指更新前的元组,后一个是更新后的元组
  • 触发事件:insert|delete|update [ of 列名1]