视图
SQL> --第一个视图: 员工号 姓名 月薪 年薪
SQL> create view view1
2 as
3 select empno,ename,sal,sal*12 annlsal from emp;
create view view1
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> /
视图已创建。
SQL> desc view1
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
SAL NUMBER(7,2)
ANNLSAL NUMBER
SQL> select * from view1;
SQL> create view view2
2 as
3 select empno,ename,sal,sal*12 annlsal,dname
4 from emp e, dept d
5 where e.deptno=d.deptno;
视图已创建。
SQL> select * from view2;
SQL> create or replace view view2
2 as
3 select empno,ename,sal,sal*12 annlsal,dname
4 from emp e, dept d
5 where e.deptno=d.deptno
6 with read only;
SQL>--with read onli只读视图
视图已创建。
SQL> create view view3
2 as
3 select * from emp where deptno =10
4 with check option ;
SQL>--加上with check option 会检查插入视图是否满足条件
只读与检查是不能同时满足的 不建议通过视图对表使用DML语句
sequence序列跟MYSQL的auto_increatment类似
使用sequence会增加效率 默认一次增长 20个因为是存在内存中 但是断电即失可能会造成序列不连续
序列是一个公有对象 也可能造成序列不连续 回滚也会造成序列的不连续
SQL> --sequence
SQL> create sequence myseq;
序列已创建。
SQL> create table testseq
2 (tid number,tname varchar2(20));
表已创建。
SQL> select myseq.CURRVAL from dual;
select myseq.CURRVAL from dual
*
第 1 行出现错误:
ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义
SQL> select myseq.NEXTVAL from dual;
NEXTVAL
----------
1
已选择 1 行。
SQL> /
NEXTVAL
----------
2
已选择 1 行。
SQL> select myseq.CURRVAL from dual;
CURRVAL
----------
2
已选择 1 行。
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
已创建 1 行。
SQL> /
已创建 1 行。
SQL> /
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from testseq;
TID TNAME
---------- --------------------
3 aaa
4 aaa
5 aaa
已选择3行。
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
已创建 1 行。
SQL> /
已创建 1 行。
SQL> rollback;
回退已完成。
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
已创建 1 行。
SQL> select * from testseq;
TID TNAME
---------- --------------------
3 aaa
4 aaa
5 aaa
8 aaa
已选择4行。
SQL> /*
SQL> 序列不连续:
SQL> 1. 内存,长度20
SQL> 2. 序列是一个公有对象
SQL> 3. rollback序列不连续:
SQL> 1. 内存,长度20
SQL> 2. 序列是一个公有对象
SQL> 3. rollback
SQL> */
索引
可以提高查询效率
默认是b树 也就是二叉树 是 比较二叉树 左子树大 右子树小
索引表不需要维护 数据库自己维护
同义词
SQL> --同义词
SQL> --为hr.EMPLOYEES起别名
SQL> create SYNONYM hremp for hr.EMPLOYEES;
同义词已创建。
SQL> select count(*) from hremp;
COUNT(*)
----------
107
已选择 1 行。
create public synonym是公共的同义词