概述
学习目标
序列概述
-
表是数据存储的主要方式
-
关注:序列提供/产生唯一的数值
-
当需要自动地提供某列值(如ID列)——》可由序列提供该值,且作为主键值(主键值要求非空唯一,序列能满足该要求)
序列
创建序列
- 创建序列同样要有创建序列的权限
查询序列
- 简而言之:查看当前数据库中的序列内容
- 未考虑缓存——》则为下一个值,如下图所示
序列的伪列
- 可理解为序列有两个方法:nextval和currval方法
- 调用完nextval方法之后才能调用currval(不然不能调用currval)
- 索引循环注意点
- 补充下背景:创建序列时,设定最大值为100,增量为10,循环方式
- 关注:100之后第一个数(循环方式)是1
使用序列
- 裂缝实例:
- 裂缝:破坏数据间的平滑性(所以要避免多个表共用一个序列)
- empo2表使用序列作为ID列的值,插入63,64,另一个表empo1也使用该序列,接着插入65,从而造成不平滑现象,即裂缝
- rollback时,数据回滚,而序列不回滚,自动提交,这时再插入ID列的值时(我们把序列作为ID列的值),会产生裂缝
- 错误示范
- 不允许select * from 序列
修改序列
- 为了保证唯一性,改变序列初始值只能通过删除序列实现,不然唯一性被破坏
删除序列
索引
- 关注:
- 创建索引后,通过该列查询表时(一定是通过该列,该列作为部分过滤条件),自动调用索引,提高查询速度
- 创建索引后不需要显式调用,程序在用户使用相应索引指定的表时,会自动地获取索引去指向(?)
- 索引是唯一的
- 索引只对表的查询速度有影响,而对查询结果没有影响
创建索引
- 主键或unique约束自动创建
- 可以手动创建
手动创建
应用场景
- 比如年龄分布范围较小(0-100),不用创建索引,而工资五花八门,可以创建索引
-
所占数据量过大——》频繁调用数据——》频繁调用索引——》干脆不用索引
-
频繁更新的表不使用索引,因为更新数据同时要维护索引——》变慢
查询索引
删除索引
同义词
- 为什么使用同义词?
- 答:类比局部变量和全局变量,同义词可在全局使用,而别名只能用于所在的select语句中