读书笔记--SQL必知必会22--高级SQL特性

22.1 约束

约束(constraint),管理如何插入或处理数据库数据的规则。
DBMS通过在数据库表上施加约束来实施引用完整性。
大多数约束是在表定义中定义的。

22.1.1 主键

主键,用来保证一列(或一组列)的值唯一标识表中的每一行。
有了主键,可以安全地UPDATE或DELETE特定行。

  • 任意两行的主键都不相同。
  • 每行都具有一个主键值(即列中不允许NULL值)。
  • 主键值不能重用。如果从表中删除某一行,其主键值不能分配给新行。

22.1.2 外键

外键是表中的一列,其值必须列在另一表的主键中。
外键有助防止意外删除。在定义外键后,DBMS不允许删除在另一个表中具有关联的行。
有些DBMS支持称为级联删除(cascading delete)的特性。如果启用,该特性在从一个表中删除行时删除所有相关的数据。

22.1.3 唯一约束

唯一约束用来保证一列(或一组列)中的数据时唯一的。
不同于主键,唯一约束列可包含NULL值、可修改或更新、可重复使用、不能用来定义外键。
表可以包含多个唯一约束,但每个表只允许一个主键。

22.1.4 检查约束

检查约束用来保证一列(或一组列)中的数据满足一组指定的条件。

  • 检查最大值或最小值
  • 指定范围
  • 只允许特定的值

检查约束在数据类型内又做了进一步的限制,可以确保数据有效。

有些DBMS允许用户自定义数据类型,可以在定义数据类型时包含检查约束,然后将此数据类型用于表的定义。

22.2 索引

索引用来排序数据以加快搜索和排序操作的速度。
索引必须唯一命名。

可以在一个或多个列上定义索引,使DBMS保存其内容的一个排过序的列表。
DBMS搜索排过序的索引,找出匹配的位置,然后检索这些行。

  • 索引改善检索操作的性能,但降低数据操作的性能
  • 索引数据可能占用大量存储空间
  • 索引适用取值较多的数据过滤和排序
  • 索引中可以定义多个列

表数据的变化可能会导致索引难以长时间高效适用,建议定期检查索引并调整。

22.3 触发器

触发器是特殊的存储过程,在特定的数据库活动发生时自动执行。
触发器可以与特定单个表上的INSERT、UPDATE和DELETE操作(或组合)相关联。
常见用途:

  • 保证数据一致
  • 基于某个表的变动在其他表上执行活动
  • 进行额外的验证并根据需要回退数据
  • 计算列的值或更新时间戳

不同的DBMS的触发器定义和语法差异巨大。
一般来说,约束的处理比触发器快,建议使用约束。

22.4 数据库安全

任何安全系统的基础都是用户授权和身份确认。
大多数DBMS利用提供给管理员的管理机制授予或限制对数据的访问。

安全性使用SQL的GRANT和REVOKE语句来管理。
大多数DBMS也提供了交互式的管理实用程序。

posted @ 2016-12-31 23:36  Anliven  阅读(347)  评论(0编辑  收藏  举报