第15课到21课也看过了,感觉没有什么记笔记的需要。本课很重要,一定要记一下。
本课的主题是“高级SQL特性”,介绍约束、索引和触发器。
概念
- 约束:管理如何插入或处理数据库数据的规则。
约束
引用完整性
利用键来建立一个从一个表到另一个表的引用,保证只在表中插入合法(存在于引用列)的数据。
主键
保证一列中的值是唯一的,且永不改动。
外键
有助于防止意外删除。
唯一约束
保证一列中的数据是唯一的。
检查约束
用户自定义约束,保证一列中的数据满足一组指定的条件。
- 检查最大或最小值
- 指定范围
- 只允许特定的值
保证插入数据库的数据是你想要的数据。下面的例子施加了约束,保证所有物品的数量大于0:
CREATE TABLE OrderItems
(
order_num INTEGER NOT NULL,
order_item INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL,
quantity INTEGER NOT NULL CHECK(quantity > 0),
item_price MONEY NOT NULL
);
索引
索引用来排序数据以加快搜索和排序操作的速度。
使索引有用的因素是恰当的排序。找出书中词汇的困难不在于必须进行多少搜索,而在于书的内容没有按词汇排序。
关于索引的提示
- 索引改善检所操作的性能,但降低了数据插入、修改和删除的性能。
- 索引数据可能要占用大量的存储空间。
- 取值不多的数据不如取值多的数据能通过索引得到那么多的好处
- 索引用于数据过滤和数据排序。如果你经常以某些特定的顺序排序数据,则该数据可能适合做索引。
- 可以在索引中定义多个列(例如,州加上城市)。这样的索引尽在以州加上城市的排序时有用。
- 定期检查索引,之前创建的索引经过几个月的数据处理后可能变得不再理想。
触发器
触发器可在特定操作执行之前或之后执行。
触发器的常见用途:
- 保证数据一致
- 基于某个表的变动在其他表上执行活动。比如,每当更新或删除一行是将审计跟踪记录写入日志表
- 进行额外的验证并根据需要回退数据
- 计算计算列的值或更新时间戳