《SQL必知必会》| 第22课 高级SQL特性 学习笔记
发布日期:2021-07-25 15:44:23 浏览次数:9 分类:技术文章

本文共 2498 字,大约阅读时间需要 8 分钟。

第22课 高级SQL特性

这一课介绍SQL所涉及的几个高级数据处理特性:约束、索引和触发器。

  • 约束是实施引用完整性的重要部分。
  • 索引可改善数据检索的性能。
  • 触发器可以用来执行运行前后的处理。
  • 安全选项可用来管理数据访问。

22.1 约束

关系数据库存储分解为多个表的数据,每个表存储相应的数据。利用键来建立从一个表到另一个表的引用(由此产生了术语引用完整性referential integrity)。

正确地进行关系数据库设计,需要一种方法保证只在表中插入合法数据。

不能检查合法的原因是:

  • 如果在客户端层面上实施数据库完整性规则,则每个客户观都要被迫实施这些规则,一定会有一些客户端不实施这些规则。
  • 在执行UPDATEDELETE操作时,也必须实施这些规则。
  • 执行客户端检查是非常耗时的,而DBMS执行这些检查会相对高效。
约束
  • 管理如何插入或处理数据库数据的规则。
  • DBMS通过在数据库表上施加约束来实施引用完整性。
22.1.1 主键

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

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

  • 任意两行的主键值都不相同。
  • 每行都具有一个主键值(即列中不允许NULL值)。
  • 包含主键值的列从不修改或更新。
  • 主键值不能重用。如果从表中删除某一行,其主键值不分配给新行。一种定义主键的方法是创建它。
ALTER TABLE VendorsADD CONSTRAINT PRIMARY KEY (vend_id);

这里定义相同的列为主键,但使用的是CONSTRAINT语法。此语法也可以用于CREATE TABLEALTER TABLE语句。

22.1.2 外键

外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的极其重要部分。

  • 使用REFERENCES关键字
  • 相同的工作也可以在ALTER TABLE语句中用CONSTRAINT语法来完成。
22.1.3 唯一约束

唯一约束用来保证一列(或一组列)中的数据是唯一的。

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

  • 表可包含多个唯一约束,但每个表只允许一个主键。
  • 唯一约束列可包含NULL值。
  • 唯一约束列可修改或更新。
  • 唯一约束列的值可重复使用。
  • 与主键不一样,唯一约束不能用来定义外键。
    唯一约束既可以用UNIQUE关键字在表定义中定义,也可以用单独的CONSTRAINT定义。
22.1.4 检查约束

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

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

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

第1课介绍的数据类型限制了列中可保存的数据的类型。检查约束在数据类型内又做了进一步的限制,这些限制极其重要,可以确保插入数据库的数据正是你想要的数据。不需要依赖于客户端应用程序或用户来保证正确获取它,DBMS本身将会拒绝任何无效的数据。

  • 使用CHECK语法。

22.2 索引

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

主键数据总是排序的,这是DBMS的工作。因此,按主键检索特定行总是一种快速有效的操作。
可以在一个或多个列上定义索引,使DBMS保存其内容的一个排过序的列表。在定义了索引后,DBMS以使用书的索引类似的方法使用它。DBMS搜索排过序的索引,找出匹配的位置,然后检索这些行。

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

  • 索引改善检索操作的性能,但降低了数据插入、修改和删除的性能。在执行这些操作时,DBMS必须动态地更新索引。
  • 索引数据可能要占用大量的存储空间。
  • 并非所有数据都适合做索引。取值不多的数据(如州)不如具有更多可能值的数据(如姓或名),能通过索引得到那么多的好处。
  • 索引用于数据过滤和数据排序。如果你经常以某种特定的顺序排序数据,则该数据可能适合做索引。
  • 可以在索引中定义多个列(例如,州加上城市)。这样的索引仅在以州加城市的顺序排序时有用。如果想按城市排序,则这种索引没有用处。

索引用CREATE INDEX语句创建(不同DBMS创建索引的语句变化很大)。

  • 索引必须唯一命名。
  • ON用来指定被索引的表,而索引中包含的列(此列中仅有一列)在表明后的圆括号中给出。

22.3 触发器

触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。 触发器可以与特定表上的INSERTUPDATEDELETE操作(或组合)相关联。

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

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

  • INSERT操作中的所有新数据;
  • UPDATE操作中的所有新数据和旧数据;
  • DELETE操作中删除的数据。
    根据所使用的DBMS的不同,触发器可在特定操作执行之前或之后执行。

下面是触发器的一些常见用途。

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

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

22.4 数据库安全

数据也必须允许需要访问它的用户访问,因此大多数DBMS都给管理员提供了管理机制,利用管理机制授予或限制对数据的访问。

任何安全系统的基础都是用户授权和身份确认。这是一种处理,通过这种处理对用户进行确认,保证他是有权用户,允许执行他要执行的操作。有的DBMS为此结合使用了操作系统的安全措施,而有的维护自己的用户及密码列表,还有一些结合使用外部目录服务服务器。

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

  • 对数据库管理功能(创建表、更改或删除已存在的表等)的访问;
  • 对特定数据库或表的访问;
  • 访问的类型(只读、对特定列的访问等);
  • 仅通过视图或存储过程对表进行访问;
  • 创建多层次的安全措施,从而允许多种基于登录的访问和控制;
  • 限制管理用户账号的能力。

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

转载地址:https://blog.csdn.net/qq_34170700/article/details/104384297 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++ | 函数传入引用参数
下一篇:LeetCode | 刷题笔记 | 解题思路

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月22日 19时41分26秒