MySQL系列(三) MySQL的约束
-
约束
数据完整性 constraint
- 实体完整性保证表中有一个主键,还能够编写触发器保证数据完整性
- 域完整性保证数据每列的值知足特定条件,能够经过一下途径来保证: 选择适合的数据类型,外键,编写触发器,还能够用default 约束做为强制域完整性的一个方面
- 参照完整性保证两张表之间的关系
约束的建立和查找:
- 建立有两种方式:
- 表创建时就定义约束条件
- 利用 alter table 来进行约束的更新
- 惟一索引的默认约束名与列名相同。
约束和索引的区别:
- 约束是一个逻辑上的概念,用来保证数据的完整性
- 索引是一个数据结构,既有逻辑上的概念,在数据库中还表明物理存储的方式
对错误数据的约束:
- 数据库没有对数据的正确性进行限制。好比对null 的插入,系统会将其转化为合法的值。
enum 和 set 约束:
- 只限于对离散数值的约束。若是要对域进行约束,还须要经过触发器来实现
触发器与约束:
- 只有具有super权限的 MySQL 数据库用户才能够执行这条命令
- 最多能够对一个表创建6个触发器
外键约束:
- 外键用来保证参照完整性。通常来讲,被引用的表为父表,引用的表成为子表
- 可定义的子表操做有:
- cascade, 表示当父表发生delete 和 update 操做时,对相应的子表中的数据也进行操做
- set null,表示当父表发生delete 和 update,相应的子表数据被更新为null值,且子表的值必须容许null
- no action,表示当父表发生 delete 和update,抛出错误,不容许此操做
- restrict, 表示没有定义 on delete 和 on update 时,默认的外键设置
- 这些操做都是即时检查,有些数据库支持延时检查。
- 对于参照完整性约束,外键能起到很好的做用。可是对于数据库的导入操做时,外键每每致使在外键约束的检查上花费大量时间,由于是即时检查,因此对每一行都要进行外键检查
视图 view:
- 是一个能够当表使用的虚表,没有实际的物理存储。
- 视图的做用: 主要用来看成一个抽象装置,特别是对有些应用程序,不须要获取基表,只须要按照视图定义来完成数据或更新数据。视图能够在一个程度上起到一个安全层的做用。
物化视图:
- oracle 支持物化视图,其是根据几表实际存在的实表,即物化视图的数据存储在非易失性的存储设备上。
- 物化视图用于预先计算并保存多表的链接 join, 和汇集 group by等耗时较多的操做,这样就能够避免这些耗时的操做,从而快速获得结果。
欢迎关注本站公众号,获取更多信息