[20190218]延遲約束問題2.txt
[20190218]延遲約束問題2.txt
--//當時遇到的問題,連結如下:
http://blog.itpub.net/267265/viewspace-2122166/ => [20160716]主外來鍵與延遲約束.txt
http://blog.itpub.net/267265/viewspace-2122204/ => [20160719]主外來鍵與延遲約束2.txt
--//其它例子:
http://blog.itpub.net/267265/viewspace-2138946/ => [20170512]延遲約束問題.txt
--//當時因為開發沒有在2個存在主外來鍵上的表上建立約束,導致主表記錄刪除了,而外表資料還在.
--//主要問題在於開發有需求要刪除主表的記錄,由於條件寫錯,導致出現以上情況.
--//實際上oracle支援延遲約束,只有提交的時候才會檢查。 我當時也很無奈,明顯開發寫程式碼有問題
--//什麼能選擇刪除主記錄,然後再插入回去這樣的程式設計方式。
--//實際上查詢這個問題就花了整整一天時間,確定恢復時間又花不少時間,恢復資料庫到特定時間點又是一天。
--//更加嚴重事後根本沒有總結,更談不上更正程式設計方式。
--//實際上使用延遲約束,我個人認為更使用觸發器一樣,都不是很好的程式設計模式,再透過一個說明問題:
1.環境:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
create table t(id number);
alter table t add constraint pk_t primary key (id) deferrable initially deferred ;
insert into t values (1);
insert into t values (2);
commit ;
2.測試:
--//session 1:
SCOTT@book(274,5)> insert into t values (1);
1 row created.
SCOTT@book(274,5)> commit ;
commit
*
ERROR at line 1:
ORA-02091: transaction rolled back
ORA-00001: unique constraint (SCOTT.PK_T) violated
--//插入沒有問題,但是提交會報錯。因為違反唯一性約束,這時延遲約束的特點.繼續測試:
--//session 1:
SCOTT@book(274,5)> update t set id=3 where id=2;
1 row updated.
--//session 2:
SCOTT@book(41,19)> update t set id=3 where id<=2;
--//掛起!!因為修改都包括id=2的記錄.
--//session 1:
SCOTT@book(274,5)> commit ;
Commit complete.
--//session 2:
SCOTT@book(41,19)> update t set id=3 where id<=2;
1 row updated.
--//注意僅僅修改1條。
SCOTT@book(41,19)> commit ;
Commit complete.
SCOTT@book(41,19)> select * from t;
ID
----------
3
3
--//破壞了唯一性約束.
--//在12.2.0.2(for windows 64位)下測試結果也一樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2636215/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android WorkManager工作約束,延遲與查詢工作Android
- Vivado使用技巧(32):IO延遲的約束方法
- [20190124]bbed恢復資料遇到延遲塊清除的問題2.txt
- [20231115]建立enable novalidate約束2.txt
- 分析伺服器延遲的問題伺服器
- 美國伺服器延遲高怎麼辦,如何解決延遲問題伺服器
- 第78篇 Redis常見延遲問題Redis
- 伺服器延遲問題如何解決伺服器
- MySQL之 從複製延遲問題排查MySql
- 疫情延遲 題解
- 『開源』大半夜除錯TCP延遲問題除錯TCP
- 怎麼解決伺服器延遲問題伺服器
- Google 怎麼解決長尾延遲問題Go
- 定時器(setTimeout/setInterval)最小延遲的問題定時器
- 《RabbitMQ》| 解決訊息延遲和堆積問題MQ
- QWidget設定layout時的延遲重新整理問題
- mysql同步問題之Slave延遲很大最佳化方法MySql
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 如何避免MYSQL主從延遲帶來的讀寫問題?MySql
- 教你如何解決MySQL資料延遲跳動的問題MySql
- 一次 RocketMQ 順序消費延遲的問題定位MQ
- 新 Uber 司機端是如何克服網路延遲問題
- 這套方法論,徹底終結MySQL同步延遲問題MySql
- 由於網路延遲造成邏輯鎖過期的問題
- MySQL主從資料庫同步延遲問題怎麼解決MySql資料庫
- [20190124]bbed恢復資料遇到延遲塊清除的問題.txt
- RabbitMQ延遲訊息的延遲極限是多少?MQ
- iOS Autolayout 修改約束優先順序崩潰問題iOS
- 延遲繫結
- 約束
- 深入剖析:如何使用Pulsar和Arthas高效排查訊息佇列延遲問題佇列
- 微軟稱已修復Win10 1903/1909 “延遲更新”消失問題微軟Win10
- 你的Redis為什麼變慢了?常見延遲問題定位與分析Redis
- [20190125]bbed恢復資料遇到延遲塊清除的問題3.txt
- Javaweb-約束-外來鍵約束JavaWeb
- redis 延遲佇列Redis佇列
- Mybatis延遲查詢MyBatis
- WebGL之延遲著色Web