– 序列:通常用来生成主键值,可以自增或自减
创建序列
-- 简单创建 create sequence emp_seq; -- 复杂创建 -- 指定所有属性值创建 create sequence emp_seq start with 1 --从1开始取值 increment by 1 --每次增加1 minvalue 1 --最小值1 maxvalue 9999999999 --最大值9999999999 nocycle --不要循环 cache 20; --缓存20个值 -- currval 和 nextval 伪列 select emp_seq.nextval from dual;--必须先使用nextval,在执行currval select emp_seq.currval from dual;
使用序列
select * from emp; insert into emp(empno) values (emp_seq.nextval);
修改序列
-- 除start with不能更改,其他都能更改 alter sequence emp_seq increment by 2 minvalue 5--不能大于于当前值 maxvalue 10;--不能小于当前值
rowid 应用
了解
删除序列
drop sequence emp_seq;
– 索引:通常用来优化查询速度
创建索引
-- 自动创建 -- 手动创建 -- 单列索引 create index emp_ename_index on emp(ename); -- 复合索引 create index emp_deptno_job_index on emp(deptno,job);
测试索引
1.创建表emp_bak,复制emp表结构,以及所有的数据 create table emp_bak as select * from emp; 2.批量新增数据到emp_bak表中(单位:百万) insert into emp_bak select * from emp_bak; --多次重复执行,目前3670016 3.将empno列的数据更新为唯一值 update emp_bak set empno = rownum; --第一种方式 update emp_bak set empno = emp_seq.nextval; --第二种方式 alter table emp_bak modify(empno number(10)); --原empno长度为4,精度不够,修改为长度10 4.测试效率--(可借助F5(explain plan window)窗口分析SQL语句执行效率) select * from emp_bak where empno=3000000; --无索引 0.12左右 create index emp_empno_index on emp_bak(empno);--创建empno列的索引 select * from emp_bak where empno=3000000; --有索引 0.015左右
删除索引
drop index emp_empno_index;
–数据字典
select * from user_tables; -- 查询表
select * from user_constraints;--查询约束
select * from user_cons_columns; --查询约束及相关列
select * from user_indexes;--查询当前用户所有的索引
select * from user_ind_columns;--查询当前用户的所有索引,及相关列
–同义词
创建同义词
--创建同义词(private私有同义词:属于当前用户scott) create synonym e for emp;--相当于给emp表取别名 --权限不足,sys授权 grant create synonym to scott; --测试 select * from scott.emp; select * from scott.e; --创建同义词(public公有同义词:属于共有用户,不属于某一指定用户) create public synonym a for emp; --权限不足,sys授权 grant create public synonym to scott;
测试
select * from a;
删除同义词
drop synonym e;