经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词 - Stars-one
来源:cnblogs  作者:Stars-one  时间:2019/5/24 10:07:50  对本文有异议

数据库对象

用户模式:指数据库用户所创建和存储数据对象的统称。在访问其它用户模式的数据库对象时需加上用户模式。
如:scott.emp, scott.dept等。
数据库对象包括:表、视图、索引、序列、目录、同义词、数据库用户、存储过程、函数、触发器等。

同义词

同义词是现有数据库对象的一个别名。

  1. 简化SQL语句
  2. 隐藏对象的名称和所有者

同义词分为私有和公有的

  1. --创建同义词得通过sys进行授权
  2. grant create [any] synonym to $username$; --授权,创建私有同义词
  3. grant create public synonym to $username$;--授权,创建公有同义词

私有:只有当前用户才能使用

  1. --创建私有同义词
  2. create [or replace] synonym 同义词名称 for 对象(如:表,视图等);
  3. drop synonym $同义词名$; --删除同义词
  4. create or replace synonym emp for employee;

公有:全部的用户都能使用

  1. --创建公有同义词
  2. create [or replace] public synonym 同义词名称 for 对象(如:表);
  3. drop public synonym $同义词名$;--删除同义词
  4. create or replace public synonym emp for employee;

序列

序列是用于生成唯一、连续序号的对象,如:1,2,3.......
作用:
序列常用于生成表的主键值、唯一键的值以及需要连续序号的场合。
补充:
序列可以是升序的,也可以是降序的。
一个序列产生的值可以同时供多个表使用,如果有这个需要的话。
创建序列:

  1. --语法
  2. CREATE SEQUNCE 序列名
  3. START WITH 初始值
  4. INCREMNT BY 步长】 --步长为负数,则是降序
  5. MAXVALUE 最大值】
  6. MINVALUE 最小值】
  7. CYCLE/NOCYCLE
  8. CACHE/NOCACH】默认oracle缓存20个序列值
  1. create sequence emp_seq
  2. start with 1;
  3. select emp_seq.nextval from dual;
  4. --先执行,序列才会有数据,从1开始,步长默认为1,执行一次,序列的当前数值就会自加1
  5. slect emp_seq.currval from dual;--返回当前的数值
  6. --创建序列
  7. create sequence emp_seq
  8. start with 8001; --没加increment by 默认步长为1
  9. --最初创建序列时初始值是没有的,第一次访问序列必须先访问它的nextval属性
  10. select emp_seq.nextval from dual;
  11. select emp_seq.nextval,emp_seq.currval from dual;
  12. --修改序列,不能修改初始值(start with x)
  13. select max(empno) from emp;
  14. --删除序列
  15. drop sequence emp_seq;
  16. --在插入时使用序列来生成主键值
  17. insert into employee(empno,ename,job,sal) values(emp_seq.NEXTVAL, 'james','CLERK',3999);
  18. --生成序列的下一个值
  19. select emp_seq.nextval from dual;
  20. --访问序列的当前值
  21. select 'XYZ-'||emp_seq.currval from dual;

视图

视图,被称为虚拟表,可以简化select语句
作用:

  • 提供了另外一种级别的表安全性
  • 隐藏的数据的复杂性
  • 简化的用户的SQL语句
  • 隔离基表(创建视图时用到的表)结构的改变
  • 通过重命名列,从另一个角度提供数据
  • 数据独立性

和之前的序列一样,需要sys进行授权

  1. grant create view to $username$
  1. --相当于复制一个表
  2. create view emp_view as select * from employee
  3. --隐藏了其他的属性,只显示员工编号,姓名以及部门
  4. create view emp_view as select empno,ename,deptno from employee
  5. --复杂查询的结果当成一个表
  6. --列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,和工资等级
  7. --如果需要使用当前的结果,使用select语句就简单许多
  8. create or replace view emp_sal_vw
  9. as
  10. select e.empno,
  11. e.ename,
  12. d.dname dept_name,
  13. m.empno as mgrNo,
  14. m.ename as manager,
  15. s.grade
  16. from employee e,
  17. employee m,
  18. department d,
  19. salgrade s
  20. where e.mgr=m.empno(+)
  21. AND e.deptno=d.deptno
  22. AND e.sal>(select avg(sal) from employee)
  23. AND e.sal BETWEEN s.losal AND s.hisal;

索引

查询时候数据量大的时候,通过索引可以提高查询的效率(百万条数据级别),在常用的列名(字段)创建索引

  1. --创建索引
  2. create [unique] index $indexName$ on $tablename$(列名1,列名2...)

唯一索引和普通索引

索引有唯一索引和普通索引,如在多个列上创建索引则成为组合索引
唯一索引一般在创表的时候,把某列设置某个主键,系统就会自动为该列创建唯一索引

  1. --普通索引
  2. create index hiredate_idx on employee(hiredate);
  3. --组合索引
  4. create index emp_comp on employee(mgr,deptno);
  5. --组合索引的顺序可以是任意的,不过,此顺序会影响查询的时候是否会启用索引查询
  6. --下面两条是会启用索进行查询
  7. select mgr,deptno from employee;
  8. select mgr from employee;
  9. --下面两条是会不会启用索进行查询
  10. select deptno from employee;
  11. select deptno,mgr from employee;

函数索引

  1. create index emp_job_fun on employee(lower(job));
  2. --不启用索引查询
  3. select * from employee where job='CLERK';
  4. --启用索引查询
  5. select * from employee where lower(job)='clerk';

原文链接:http://www.cnblogs.com/kexing/p/10914184.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号