C_T_ID1Cid5ENABLEDNOT DEFERRABLE IMMEDIATE VALIDATED
注意 , 此时约束的三个属性取值分别为:deferrable: not deferrable;deferred:immediate;validated:validated;
我们观察一下此时数据表的插入现象:
SQL insert into t values (1); //插入非法的数据;
insert into t values (1)
ORA-02290: 违反检查约束条件 (SYS.C_T_ID1) //立刻报错,将数据剔除mysql数据字典怎么写!
SQL insert into t values (6);
1 row inserted
SQL commit;
Commit complete
SQL select * from t;
ID
----------
6
结论:在默认情况下,Oracle的约束是不允许延迟(not deferrable)、立即应用和验证的(immediate、validated) 。在数据变化的时候,立即进行约束验证 。
2、 deferrable:约束应用可以延迟
deferrable默认值为not deferrable,字面含义是不可延迟 。那么我们如果设置可以延迟 , 效果是什么呢?
SQL alter table T
2drop constraint C_T_ID1;
Table altered
SQL alter table T
2add constraint C_T_ID1
3check (id5)
4deferrable;
Table altered
此时,数据字典中的情况是如下:
SQL select constraint_name,SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATEDfrom dba_constraints where table_name='T' and wner='SYS';
CONSTRAINT_NAMECTYPESTATUSDEFERRABLEDEFERREDVALIDATED
-------------------- ------------- -------------- --------- -------------
C_T_ID1CENABLEDDEFERRABLEIMMEDIATE VALIDATED
与默认情况相比,deferrable属性变化为了deferrable 。我们观察一下现象:
SQL insert into t values (3);
insert into t values (3)
ORA-02290: 违反检查约束条件 (SYS.C_T_ID1)
在插入数据的时候,立即进行约束验证 。和默认情况下没有差异 。那么怎么处理呢?
//手工设置deferred属性为deferred
SQL set constraint c_t_id1 deferred;
Constraints set
SQL insert into t values (3); //此时插入数据时候 , 并不进行验证操作了 。
1 row inserted
SQL insert into t values (7);
1 row inserted
SQL commit;
commit
ORA-02091: 事务处理已回退
ORA-02290: 违反检查约束条件 (SYS.C_T_ID1) //直到进行commit的时候,才会应用约束;
那么,如何设置回原有的属性呢?
SQL set constraint c_t_id1 immediate;
Constraints set
SQL insert into t values (4); //又恢复插入立刻检查约束的状态了?
insert into t values (4)
ORA-02290: 违反检查约束条件 (SYS.C_T_ID1)
结论:单独deferrable的含义就是是否允许约束检查延后进行 。单独设置deferrable为deferrable之后,约束检查延后是不可以直接使用的,要配合deferred参数,如果该参数是immediate,那么约束还是在DML的时候进行应用 。如果deferred参数设置为deferred,约束就是在事务commit提交的时候应用,出现错误就连带回滚rollback整个事务 。
3、 deferred:是否进行延迟应用
从上面的实验中 , 我们可以看出deferred属性是配合deferrable属性使用的 。当deferrable设置为deferrable之后,可以通过set constraints进行deferred属性的设置,来确定约束应用时点 。
本部分确定deferred定义的方式和与deferrable属性的关系 。是可以在定义约束是使用initially关键字来确定约束的deferred属性取值 。
SQL alter table T
2add constraint C_T_ID1
3check (id5)
4deferrable initially deferred;
Table altered
mysql 数据字典 如何导出成word形式运行mysql
连接到数据库
在命令行提示符输入
SHOW
FULL
FIELDS
FROM
【表名称
】
把返回的信息复制粘贴到
word
完成 。
注:SHOW
推荐阅读
- 疫情下如何生活ppt,疫情下的生活ppt
- 新u盘怎么安装电脑系统,u盘怎么安装电脑系统教程
- cssli字体居中显示,css让字体居中
- 商场拍摄穿什么衣服,商场拍照姿势大全
- go语言难吗 go语言好学吗
- qq影音直播素材,音频直播
- mysql怎么恢复库 mysql数据库恢复方法
- ios测量道路软件有哪些,苹果手机道路测量软件
- 汇众网络游戏场景设计,汇众网络游戏场景设计怎么样