SQL

SQL 知识量:22 - 44 - 129

22.2 索引和触发器><

索引- 22.2.1 -

索引用于排序数据以加快搜索和排序操作的速度。给数据添加索引就像制作字典,字典中的单词按照首字母进行了排序,因此查找速度会快很多。给一个或多个列定义索引,就可以保存其内容的一个排过序的列表,DBMS以查找字典的方式使用它,检索十分高效。

创建索引前,需要了解以下内容:

  • 索引虽然改善了查询的效率,但会降低数据插入、修改和删除的性能,因为这些操作发生时,DBMS需要额外的资源维护索引表。

  • 索引数据可能要占用大量的存储空间。

  • 并非所有数据都适合建立索引。差异越大的数据越适合建立索引,反之,索引的作用越小。

  • 索引用于数据过滤和数据排序。通常用于排序的数据适合建立索引。

  • 可以在索引中定义多个列。

使用create index语句创建索引,例如:给people表的name列建立索引。

create index name_index on people(name);

以上SQL语句中,name_index是索引的名称,on用于指定被索引的表。

注意:索引的效率会随表数据的增减、更新而变化,最好定期对索引进行检查和调整。

触发器- 22.2.2 -

触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行,就像一个守夜人一样,发生预想的事情时,就按预案办。

触发器可以与特定表上的insert、update和delete操作(或组合)相关联。根据DBMS不同,触发器可在特定操作执行之前或之后执行。但是,触发器只与单个表相关联。

触发器内的代码具有以下数据访问权:

  • insert操作中的所有新数据。

  • update操作中的所有新数据和旧数据。

  • delete操作中删除的数据。

触发器的主要用途包括:

  • 保证数据一致。

  • 基于某个表的变动在其他表上执行动作。

  • 进行额外的验证并根据需要回退数据。

  • 计算需要进行计算的列的值或更新时间戳。

注意:

  • 不同的DBMS的触发器语法差异很大,使用时应当参考有关文档。

  • 一般情况下,约束的处理速度比触发器更快,因此,应当尽可能使用约束。

数据库安全- 22.2.3 -

任何安全系统的基础都是用户授权和身份确认。通过这种方法保证有权用户执行他可以执行的操作。

为实现这种能力,有的DBMS结合使用了操作系统的安全措施;有的维护自己的用户及密码列表;有的结合使用提供外部目录服务的服务器。

通常需要保护的操作有:

  • 对数据库管理功能(创建、更改、删除表等)的访问。

  • 对特定数据库或表的访问。

  • 访问的类型(只读、对特定列的访问等)。

  • 仅通过视图或存储过程对表进行访问。

  • 创建多层次的安全措施,从而允许多种基于登录的访问和控制。

  • 限制管理用户账号的能力。

数据库的安全性使用SQL的grant和revoke语句来管理。DBMS提供的交互式管理实用程序,在内部也是使用grant和revoke语句。