SQL learning - chapter22

Posted by franki on March 9, 2023

第22课 高级 SQL 特性

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

22.1 约束

利用键来建立一个表到另一个表的引用。

22.1.1 主键

  • 任意两行的主键值都不相同
  • 每行都具有一个主键值
  • 包含主键值的列从不修改或更新
  • 主键值不能重用

关键字 PRIMARY KEY

22.1.2 外键

输入

CREATE TABLE Orders
(
  order_num INTEGER NOT NULL PRIMARY KEY,
  order_date DATETIME NOT NULL,
  cust_id CHAR(10) NOT NULL REFERENCES
  Customers(cust_id)
);

关键字 REFERENCES

输入

ALTER TABLE Orders
ADD CONSTRAINT
FOREIGN KEY (cust_id) REFERENCES Customers (cust_id);

22.1.3 唯一约束

  • 表可包含多个唯一约束,但是每个表只允许一个主键
  • 唯一约束列可包含 NULL 值
  • 唯一约束列可修改更新
  • 唯一约束列可重复利用
  • 与主键不一样,唯一约束不能用来定义外键

22.1.4 检查约束

  • 检查最大或最小值
  • 指定范围
  • 只允许特定的值
CREATE TABLE OrderItems
(
  order_num INTEGER NOT NULL,
  quantity INTEGER NOT NULL CHECK (quantity > 0)
);

保证插入或更新的 quantity 必须大于0。

22.2 索引

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

  • 索引改善检索操作的性能
  • 索引数据可能要占用大量存储空间
  • 并非所有的数据都适合索引
  • 索引用于数据过滤或数据排序
  • 可以在索引定义多个列

输入

CREATE INDEX prod_name_ind
ON Products (prod_name);

索引必须唯一命名。

22.3 触发器

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

与单个表关联。

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

  • INSERT 操作中的所有新数据
  • UPDATE 操作中的所有新数据和旧数据
  • DELETE 操作中删除的数据
CREATE TRIGGER customer_state
ON Customers
FOR INSERT, UPDATE
AS
UPDATE Customers
SET cust_state = Upper(cust_state)
WHERE Customers.cust_id = inserted.cust_id;

22.4 数据库安全

用户授权和身份确认

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

22.5 小结

讲授如何使用 SQL 的一些高级特性。约束是实施引用完整性的重要部分,索引可改善数据检索的性能,触发器可以用来执行运行前后的处理,安全选项可以用来管理数据的访问。