高级SQL特性

1.约束

SQL已经改进过多个版本,成为非常完善和强大的语言。许多强有力的特性给用户提供了高级的数据处理技术,如约束。

约束(constraint)

管理如何插入或处理数据库数据的规则

DBMS通过在数据库表上施加约束来实施引用完整性。

大多数约束是在表定义中定义的,用CREATE TABLE 或 ALTER TABLE语句。

1.1主键

主键是一种特殊的约束,用来保证一列中的值是唯一的,而且永不改动。

换句话说,表中的一列的值唯一标识表中的每一行。

这方便了直接或交互地处理表中的行。

没有主键,要安全地UPDATE或DELETE特定行而不影响其他行会非常困难。

表中任意列只要满足以下条件,都可以用于主键。

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

外键是表中的一列,其值必须列在另一表的主键中。

外键是保证引用完整性的极其重要部分。

提示:

外键有助防止意外删除

在定义外键后,DBMS不允许删除在另一个表中具有关联行的行。

1.3唯一约束

唯一约束用来保证一列中的数据是唯一的。

它们类似于主键,但存在以下重要区别。

表可包含多个唯一约束,但每个表只允许一个主键。

  • 唯一约束列可包含NULL值。
  • 唯一约束列可修改或更新。
  • 唯一约束列的值可重复使用。
  • 与主键不一样,唯一约束不能用来定义外键。
1.4检查约束

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

检查约束的常见用途有以下几点。

  • 检查最小或最大值。
  • 指定范围。
  • 只允许特定的值。
2.索引

索引用来排序数据以加快搜索和排序操作的速度。

在开始创建索引前,应该记住以下内容。

索引改善检索操作的性能,但降低了数据插入、修改和删除的性能。在执行这些操作时,DBMS必须动态地更新索引。

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

并非所有数据都适合做索引。取值不多的数据不如具有更多可能值的数据,能通过索引得到那么多的好处。

索引用于数据过滤和数据排序。如果你经常以某种特定的顺序排序数据,则该数据可能适合做索引。

可以在索引中定义多个列。这样的索引仅在以州加城市的顺序排序时有用。如果想按城市排序,则这种索引没有用处。

没有严格的规则要求什么应该索引,何时索引。

大多数DBMS提供了可用来确定索引效率的实用程序,应该经常使用这些实用程序。

SQL
CREATE INDEX prod_name_ind
ON Products (prod_name);

"CREATE INDEX arist_id
 ON songs(song_id)"
3.触发器

触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。

触发器可以与特定表上的INSERT、UPDATE、和DELETE操作相关联。

与存储过程不一样(存储过程只是简单的存储SQL语句),触发器与单个的表相关联。

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

  • INSERT操作中的所有新数据;
  • UPDATE操作中的所有新数据和旧数据
  • DELETE操作中删除的数据。

触发器的一些常见用途。

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

提示:

约束比触发器更快

一般来说,约束的处理比触发器快,因此在可能的时候,应该尽量使用约束。

4.数据库安全

对于组织来说,没有什么比它的数据更重要了,因此应该保护这些数据,使其不被偷盗或任意浏览。当然,数据也必须允许需要访问它的用户访问,因此大多数DBMS都给管理员提供了管理机制,利用管理机制授予或限制对数据的访问。

任何安全系统的基础都是用户授权和身份确认。

这是一种处理,通过这种处理对用户进行确认,保证他是有权用户,允许执行他要执行的操作。

有的DBMS为此结合使用了操作系统的安全措施,而有的维护自己的用户及密码列表,还要一些结合使用外部目录服务服务器。

一般来说,需要保护的操作有:

对数据库管理功能的访问;

对特定数据库或表的访问;

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

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

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

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

安全性使用SQL的GRANT和REVOKE语句来管理,不过,大多数DBMS提供了交互式的管理实用程序,这些实用程序在内部使用GRANT和REVOKE语句

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部