【数据库】创建视图约束
来源:互联网 发布:爱知 流星 编辑:程序博客网 时间:2024/06/05 18:10
针对视图,oracle提供了check option选项,以保证视图数据的完整性。本节将从以下几个方面分析with check option选项。
1、with check option 仅在视图定义中含有where子句的情况下起作用。
with check option 选项可以保证视图数据完整性。
例子:首先修改视图vw_employees的定义----只选择员工ID大于3的记录,同时使用with check option选项,响应的SQL语句如下所示。
SQL>create or replace view vw_employees as
select employee_id, employee_name, employee_position from employees
where employee_id >3
with check option;
其中,select employee_id、employee_name 和employee_position from employees where employee_id >3用于定义视图查询-----选择表employees中employee_id大于3的记录。此时,可以查询视图中的数据,响应的SQL语句如下所示。
select * from vw_employees;
2、with check option 选项仅对insert/update操作有效。
with check option 选项并非对所有DML操作均起作用,而只针对insert/update 操作有效。在试验了update操作之后,可以再次测试对insert操作的影响。
例子:尝试向视图vw_employees中,插入employee_id为2的数据。
SQL>insert into vw_employees values(2, '李四', '测试工程师');
3、with check option 选项实际创建了一个约束
with check opiton 选项实际为视图创建了一个约束。约束是对表或视图中的数据进行限制的一种数据库对象。关于约束的详细信息。
例子:oracle提供了数据字典user_constraints,该视图可以查看用户创建的所有约束。通过该视图,可以查询到with check option所创建的约束。
4、总结with check option选项
通过前面的介绍可知,with check option 实际为视图创建了一个约束,而该约束的检查依据为where 子句中的条件。当修改视图中的数据时,oracle将会判断修改后的数据是否违反了该约束。如果违反约束将抛出错误,并禁止修改。因此,对于视图vw_employees,当尝试修改employee_id列的值为3或插入employee_id列值为2的数据时,都将违反约束employee_id>3,并且导致修改失败;反之,对视图数据的修改将能够成功完成。
同理,由于删除语句总是针对整条记录,因此,删除操作不会违反employee_id>3,的约束,当然,无论where 子句中使用了何种条件,with check option 所创建的约束都不会对删除产生影响。这也是with check option 选项仅对insert/update操作起作用的原因了。
- 【数据库】创建视图约束
- oracle 数据库常用创建表、约束、视图、索引等
- oracle数据库创建表、序列、视图、约束要点
- 在视图上创建约束
- 数据库约束和视图问题
- 视图与数据库完整性约束
- 数据库的创建+约束
- 数据库创建视图
- SQL 数据库 创建视图
- 数据库 创建视图
- 数据库_视图、序列、索引、约束
- 数据库无法创建数据库视图
- MySQL数据库视图:视图定义、创建视图、修改视图
- 创建数据库、表、主外键、各种约束、存储过程、视图、索引、事务使用、触发器、创建登录账号、数据库用户 Sql语句示例
- Day54、约束(主键约束、唯一约束、检查约束、非空约束)、数据库对象(序列、索引、视图、分页)
- mssql 数据库视图创建索引
- 数据库创建视图失败总结
- Oracle创建表、约束、视图、索引、序列、同义词、表空间
- 二叉搜索树的实现
- Android:在工程任意位置获取应用程序的Context
- 组件布局学习/方法的参数中含有接口
- spring+mybatis一个方法执行多条更新语句,实现批量DML
- sql语法实战50题
- 【数据库】创建视图约束
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
- bzoj1070--写下一个傻逼错误,警示自己
- mysql 利用触发器(Trigger)让代码更简单
- linux系统ps命令见解
- Linux 技巧:让进程在后台可靠运行的几种方法
- SpringMVC中拦截/和拦截/*的区别,访问静态资源
- 音频之傅里叶变换的一些资料
- 上传图片立即显示