oracle简单视图read only、check option和默认权限的异同(相对于DML语句)
程序员文章站
2022-07-12 22:30:14
...
视图分为俩类:
简单视图:
视图所代表的sql中如果没有group by语句,
没有组函数,查询的只有一张表,那么这样的视图就是简单视图.
复杂视图
视图所代表的sql中如果有group by语句,
或者有组函数,或者查询的是多张表,那么这样的视图就是复杂视图.
s_emp表格属性
默认权限
create view DefaultAut
as
select *
from s_emp
where dept_id = '41';
1.可以插入不满足where条件的数据,原表也会更改
insert into defaultaut(id,last_name,dept_id) values(201,'tom201',41);
insert into defaultaut(id,last_name,dept_id) values(202,'tom202',43);
2.不可以更新不满足where条件的数据,不会报错,只会显示更新0条数据
update defaultaut set last_name='tommmm' where id = 202;
已更新0行。
update defaultaut set last_name='tommmm' where id = 201;
已更新 1 行。
3.不可以删除不满足where条件的数据,不会报错,只会显示更新0条数据delete from defaultaut where id = 202;
已删除0行。
delete from defaultaut where id = 201;
已删除 1 行。
查询语句
select id ,last_name,dept_id from defaultaut;
select id ,last_name,dept_id from s_emp where id >200;
read only权限
create view ReadOnlyAut
as
select *
from s_emp
where dept_id = '41'
with read only;
不可以进行任何插入、更新、删除操作,只能查询,会报错
insert into readonlyaut(id,last_name,dept_id) values(301,'tom301',41);
update readonlyaut set id = 5 where id = 201;
delete from ReadOnlyaut where id = 201;
ORA-01733: 此处不允许虚拟列
check option权限
create view CheckOptionAut
as
select *
from s_emp
where dept_id = '41'
with check option;
特点:通过视图进行的修改 那么也必须可以通过这个视图能够显示出来,要不然就操作失败
1.满足where条件的数据可以插入,不满足的会报错
insert into checkoptionaut(id,last_name,dept_id) values(401,'tom401',41);
已创建 1 行。
insert into checkoptionaut(id,last_name,dept_id) values(401,'tom401',42);
第 1 行出现错误:
ORA-01402: 视图 WITH CHECK OPTIDN where 子句违规
2.满足where条件的数据可以修改,不满足的不可以,显示的是更新0行,不会报错update checkoptionaut set last_name='tommmmm' where id=401;
已更新 1 行。
update checkoptionaut set last_name='tommmmm' where id=4;
已更新0行。
3.满足where条件的数据可以删除,不满足的不可以,显示的是删除0行,不会报错
SQL> delete from checkoptionaut where id = 401;
已删除 1 行。
SQL> delete from checkoptionaut where id = 1;
已删除0行。
相同之处
1.改变原表的数据,视图的数据也随之改变
2.只会显示满足条件的数据
3.对简单视图的修改会改变原表