日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle外键约束修改行为(一)

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle外键约束修改行为(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Oracle的外鍵用來限制子表中參考的字段的值,必須在主表中存在。而且在主表的記錄發生變化導致外鍵參考唯一約束值發生了變化時,定義了一系列的動作。
在SQL92標準中定義了幾種外鍵改變后,如何處理子表記錄的動作,其中包括:限制Restrict:這種方式不允許對被參考的記錄的鍵值執行更新或刪除的操作;置為空Set to null:當參考的數據被更新或者刪除,那么所有參考它的外鍵值被置為空;置為默認值Set to default:當參考的數據被更新或者刪除,那么所有參考它的外鍵值被置為一個默認值;級聯Cascade:當參考的數據被更新,則參考它的值同樣被更新,當參考的數據被刪除,則參考它的子表記錄也被刪除;不做操作No action:這種方式不允許更新或刪除被參考的數據。和限制方式的區別在于,這種方式的檢查發生在語句執行之后。Oracle默認才會的方式就是這種方式。Oracle明確支持的方式包括No action、Set to null和Cascade。對于Set to Default和Restrict,Oracle的約束類型并不直接支持,不過可以通過觸發器來實現。簡單看一下Oracle的默認處理方式No action:SQL> CREATE TABLE T_P (ID NUMBER, NAME VARCHAR2(30));表已創建。SQL> ALTER TABLE T_P ADD PRIMARY KEY (ID);表已更改。SQL> CREATE TABLE T_C (ID NUMBER, FID NUMBER, NAME VARCHAR2(30));表已創建。SQL> ALTER TABLE T_C ADD CONSTRAINT FK_T_C2 ?FOREIGN KEY (FID)3 ?REFERENCES T_P (ID);表已更改。SQL> INSERT INTO T_P VALUES (1, 'A');已創建1行。SQL> INSERT INTO T_P VALUES (2, 'B');已創建1行。SQL> INSERT INTO T_C VALUES (1, 1, 'A');已創建1行。SQL> COMMIT;提交完成。對于No Action操作而言,如果主鍵的記錄被外鍵所參考,那么主鍵記錄是無法更新或刪除的。SQL> DELETE T_P WHERE ID = 1;DELETE T_P WHERE ID = 1*第1行出現錯誤:ORA-02292:違反完整約束條件(YANGTK.FK_T_C) -已找到子記錄日志SQL> UPDATE T_P SET ID = 3 WHERE ID = 1;UPDATE T_P SET ID = 3 WHERE ID = 1*第1行出現錯誤:ORA-02292:違反完整約束條件(YANGTK.FK_T_C) -已找到子記錄日志SQL> DELETE T_P WHERE ID = 2;已刪除1行。不過No Action又和Restrict操作有所區別,No Action允許用戶執行語句,在語句執行之后,或者事務結束的時候才會檢查是否違反約束。而Restrict只有檢測到有外鍵參考主表的記錄,就不允許刪除和更新的操作執行了。這也使得No Action操作支持延遲約束:SQL> ALTER TABLE T_C DROP CONSTRAINT FK_T_C;表已更改。SQL> ALTER TABLE T_C ADD CONSTRAINT FK_T_C2 ?FOREIGN KEY (FID)3 ?REFERENCES T_P (ID)4 ?DEFERRABLE INITIALLY DEFERRED;表已更改。SQL> SELECT * FROM T_P;ID NAME---------- ------------------------------1 ASQL> SELECT * FROM T_C;ID ? ? ? ?FID NAME---------- ---------- ------------------------------1 ? ? ? ? 1 ASQL> DELETE T_P WHERE ID = 1;已刪除1行。SQL> INSERT INTO T_P VALUES (1, 'A');已創建1行。SQL> COMMIT;提交完成。
oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

轉載于:https://blog.51cto.com/19880614/1194618

總結

以上是生活随笔為你收集整理的Oracle外键约束修改行为(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。