注释
1.列的注释
1) comment on column 表名.列名 is '注释的内容'; --第一次使用为添加注释
2) comment on column emp.empno is '注释';
3) comment on column 表名.列名 is '注释'; --第二次使用为修改注释 (可以用ctrl+鼠标左键修改)
4) comment on column 表名.列名 is '注释'; --注释为空串时,即为删除注释(单引号不写东西视为删除)
5) comment on column emp.empno is null; --报错,要求文字字符串
6) comment on column emp.empno is 'null'; 相当于添加了一个名为null的注释
2.表的注释
comment on table emp is '注释'; -修改删除方式同上
同义词
datavs
1.含义:相当于给数据库对象(表,索引,视图) 取一个长期有效的别名
公有同义词:所有用户都能使用的 --public synonym
私有同义词:只能是创建用户或者被授权用户使用的synonymd
2.基本语法 公有:create public synonym 公有名 for 对象名;
create public synonym sanshisan for class_1;
私有:create synonym 私有名 for 对象名;
create synonym sanshisi for class_1;
select * from class_1;
select * from scott.class_1;
select * from sanshisi;
3.删除同义词的方法 公有:drop public synonym 公有名;
drop public synonym sanshisan;
私有:drop synonym 私有名;
drop synonym sanshisi;
切换到sys账户时,同义词可以直接使用,不需要加所属用户,因为是私有同义词,无法直接找到,需要赋予查询权限,再来查看表。
视图
1.含义:将查询的结果动态保存到数据库中的一张虚拟表上
2.特点:占用空间小,查询速度快,能动态获取结果,还能像普通表一样使用
3.基本语法:创建视图--只有管理员账号才有创建视图的权限
1) create view 视图名 as SQL语句;
2) create view v_xemp as select * from emp where deptno=20;
3) select * from v_xemp;
4) select * from emp;
4.注意
1) 不能赋予用户查看同义词的权限
2) 给用户赋予查看表的权限后,可以直接使用那张表的同义词
grant select on 用户名.表名 to 用户名
--赋予用户查看某张表的权限
insert into emp (empno,ename,deptno) values (123,'菠萝',20);
--只要来源表发生改变,视图内容跟着改变
insert into v_xemp (empno,ename,deptno) values (125,'小白',20);
--修改视图后,来源表也会修改
insert into v_xemp (empno,ename,deptno) values (124,'小白',10);
--能插入数据,源表也会发生改变,但是视图中不显示,因为违反了创建视图时的where条件
grant dba to scott; 赋予权限
revoke dba from scott; 收回权限
--在视图中进行增加操作,原表也会进行对应的操作
--在emp表中,empno带有主键约束,结合上面一点所以在视图中进行增加操作必须加上empno这一列
5.用新试图替换旧视图的方法(修改视图)
create or replace view 视图名 as sql语句;
create or replace view v_xemp as select * from emp where deptno in (10,20);
删除视图 drop view v_xemp;
drop view v_emp;
drop view v_v_emp;
删除视图不会影响源表
思考题:1.视图中可以使用函数或者来源表中不存在的列吗?
--可以,需要起别名
create view v_emp as select deptno,sum(sal),max(sal) from emp group by deptno;
--提示来源表中不存在的列必须起别名
create view v_emp as select deptno,sum(sal) sum_sal,max(sal) max(sal) from emp by deptno;
2.可以基于表连接创建视图吗
--可以
表连接的表被删掉一个后,视图还在吗
--存在,但无法继续查询,可以再创建一个同名字的表
create view v_emp as select * from emp a join dept b on a.deptno=b.deptno;
--提示,来源表中不能有重复的列名
create view v_emp as select * from emp a join dept b using (deptno);
视图内容会不会随新表更改
会,物化视图:是一张实际存在的表,在源表上复制数据
优点:运行效率较快
创建物化视图的语法:create materialize view 视图名 as sql语句;
6.可以基于视图创建视图吗
--可以
create view v_v_emp as select * from v_emp where deptno in (10,20);
select * from v_v_emp;
--来源表视图被删除后,本视图还存在,但无法查询
7.可以用视图做表连接吗
--可以
8.同义词前面能加用户名吗
--可以
9.同义词能在其他用户下删除吗
--不可以
select * from all_sequences where sequence_owner = 'SCOTT';