日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

小议Oracle外键约束修改行为

發布時間:2024/8/26 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小议Oracle外键约束修改行为 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小議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_C
2 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_C
2 FOREIGN KEY (FID)
3 REFERENCES T_P (ID)
4 DEFERRABLE INITIALLY DEFERRED;


表已更改。


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


SQL> DELETE T_P WHERE ID = 1;


已刪除 1 行。


SQL> INSERT INTO T_P VALUES (1, 'A');


已創建 1 行。


SQL> COMMIT;


提交完成。


小議Oracle外鍵約束修改行為(二)
Oracle的外鍵用來限制子表中參考的字段的值,必須在主表中存在。而且在主表的記錄發生變化導致外鍵參考唯一約束值發生了變化時,定義了一系列的動作。


這篇簡單描述一下SET TO NULL操作。


小議Oracle外鍵約束修改行為(一):http://yangtingkun.itpub.net/post/468/478045






上一篇描述了Oracle外鍵處理默認操作:No Action,這里簡單介紹一下SET TO NULL操作。還是利用前面例子的表,不過約束需要重建。


SQL> DROP TABLE T_C;


表已刪除。


SQL> DROP TABLE T_P;


表已刪除。


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_C
2 FOREIGN KEY (FID)
3 REFERENCES T_P (ID)
4 ON DELETE SET NULL;


表已更改。


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> INSERT INTO T_C VALUES (2, 2, 'B');


已創建 1 行。


SQL> INSERT INTO T_C VALUES (3, 1, 'C');


已創建 1 行。


SQL> COMMIT;


提交完成。


下面檢查一下DELETE SET NULL是如何工作的:


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A
2 2 B
3 1 C


SQL> DELETE T_P WHERE ID = 2;


已刪除 1 行。


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A
2 B
3 1 C


SQL> UPDATE T_P SET ID = 3;
UPDATE T_P SET ID = 3
*第 1 行出現錯誤:
ORA-02292: 違反完整約束條件 (YANGTK.FK_T_C) - 已找到子記錄日志


可以看到這個Set no null的操作和語法中的名稱一樣,只對DELETE操作有效,而對于UPDATE操作無效。


這個約束操作還有一個前提,就是要求子表的外鍵列允許為空,否則對主表的DELETE操作會報錯:


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A
2 B
3 1 C


SQL> DELETE T_C WHERE ID = 2;


已刪除 1 行。


SQL> ALTER TABLE T_C MODIFY FID NOT NULL;


表已更改。


SQL> DELETE T_P;
DELETE T_P
*第 1 行出現錯誤:
ORA-01407: 無法更新 ("YANGTK"."T_C"."FID") 為 NULL


從這里也可以看到,雖然Oracle支持Set to null,但是只是實現了DELETE語句,而沒有實現UPDATE語句,這和SQL標準的定義還是有區別的。


小議Oracle外鍵約束修改行為(三)
Oracle的外鍵用來限制子表中參考的字段的值,必須在主表中存在。而且在主表的記錄發生變化導致外鍵參考唯一約束值發生了變化時,定義了一系列的動作。


這篇簡單描述一下CASCADE操作。


小議Oracle外鍵約束修改行為(一):http://yangtingkun.itpub.net/post/468/478045


小議Oracle外鍵約束修改行為(二):http://yangtingkun.itpub.net/post/468/478119






上一篇描述了Oracle外鍵處理操作:SET TO NULL,這里簡單介紹一下CASCADE操作。還是利用前面例子的表,不過約束需要重建。


SQL> DROP TABLE T_C;


表已刪除。


SQL> DROP TABLE T_P;


表已刪除。


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_C
2 FOREIGN KEY (FID)
3 REFERENCES T_P (ID)
4 ON DELETE CASCADE;


表已更改。


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> INSERT INTO T_C VALUES (2, 2, 'B');


已創建 1 行。


SQL> INSERT INTO T_C VALUES (3, 1, 'C');


已創建 1 行。


SQL> COMMIT;


提交完成。


下面看看CASCADE是如何工作的:


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A
2 2 B
3 1 C


SQL> DELETE T_P WHERE ID = 2;


已刪除 1 行。


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A
3 1 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) - 已找到子記錄日志


可以看到,和SET TO NULL約束一樣,CASCADE操作也是只對DELETE語句有效,而對于UPDATE語句不起作用。


另外提一句,和SET TO NULL不同,CASCADE具有傳遞性,主表刪除一條記錄,會導致子表參考的記錄被刪除,而子表的記錄被刪除又會導致子表的子表記錄被刪除:


SQL> ALTER TABLE T_C ADD PRIMARY KEY (ID);


表已更改。


SQL> CREATE TABLE T_C_C (ID NUMBER PRIMARY KEY, FID NUMBER,?
2 CONSTRAINT FK_T_C_C FOREIGN KEY (FID) REFERENCES T_C(ID) ON DELETE CASCADE);


表已創建。


SQL> INSERT INTO T_C_C VALUES (1, 1);


已創建 1 行。


SQL> CREATE TABLE T_C_C_C (ID NUMBER PRIMARY KEY, FID NUMBER,?
2 CONSTRAINT FK_T_C_C_C FOREIGN KEY (FID) REFERENCES T_C_C(ID) ON DELETE CASCADE);


表已創建。


SQL> INSERT INTO T_C_C_C VALUES (1, 1);


已創建 1 行。


SQL> COMMIT;


提交完成。


下面看看級聯刪除的效果:


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A
3 1 C


SQL> SELECT * FROM T_C_C;


ID FID
---------- ----------
1 1


SQL> SELECT * FROM T_C_C_C;


ID FID
---------- ----------
1 1


SQL> DELETE T_P;


已刪除 1 行。


SQL> SELECT * FROM T_P;


未選定行


SQL> SELECT * FROM T_C;


未選定行


SQL> SELECT * FROM T_C_C;


未選定行


SQL> SELECT * FROM T_C_C_C;


未選定行


小議Oracle外鍵約束修改行為(四)
Oracle的外鍵用來限制子表中參考的字段的值,必須在主表中存在。而且在主表的記錄發生變化導致外鍵參考唯一約束值發生了變化時,定義了一系列的動作。


這篇描述一下如何實現UPDATE CASCADE。


小議Oracle外鍵約束修改行為(一):http://yangtingkun.itpub.net/post/468/478045


小議Oracle外鍵約束修改行為(二):http://yangtingkun.itpub.net/post/468/478119


小議Oracle外鍵約束修改行為(三):http://yangtingkun.itpub.net/post/468/478172






前面幾篇文章介紹了Oracle所支持的3種約束行為NO ACTION、DELETE SET NULL和DELETE CASCADE。


至于SQL標準中定義的其他操作,Oracle只能通過觸發器來實現,這里給出一個簡單的UPDATE CASCADE操作的例子。


SQL> DROP TABLE T_C;


表已刪除。


SQL> DROP TABLE T_P;


表已刪除。


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_C
2 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;


提交完成。


檢查一下直接更新操作:


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


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> CREATE OR REPLACE TRIGGER T_P_UPDATE_CASCADE?
2 BEFORE UPDATE OF ID ON T_P?
3 FOR EACH ROW
4 WHEN (NVL(NEW.ID, -1) != NVL(OLD.ID, -1))
5 DECLARE
6 V_STR VARCHAR2(32767);
7 BEGIN
8 FOR I IN (SELECT OWNER, TABLE_NAME, CONSTRAINT_NAME?
9 FROM ALL_CONSTRAINTS
10 WHERE CONSTRAINT_TYPE = 'R'
11 AND R_OWNER = 'YANGTK'
12 AND R_CONSTRAINT_NAME IN?
13 (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'T_P'))
14 LOOP
15 V_STR := 'UPDATE ' || I.TABLE_NAME || ' SET ';?
16 FOR J IN (SELECT COLUMN_NAME FROM ALL_CONS_COLUMNS?
17 WHERE OWNER = I.OWNER
18 AND TABLE_NAME = I.TABLE_NAME?
19 AND CONSTRAINT_NAME = I.CONSTRAINT_NAME)?
20 LOOP
21 V_STR := V_STR || J.COLUMN_NAME || ' = ' || :NEW.ID?
22 || ' WHERE ' || J.COLUMN_NAME || ' = ' || :OLD.ID;
23 END LOOP;
24 EXECUTE IMMEDIATE V_STR;
25 END LOOP;
26 END;
27 /


觸發器已創建


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


SQL> UPDATE T_P SET ID = 3 WHERE ID = 1;


已更新 1 行。


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
3 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 3 A


采用動態SQL的好處是,即使新增了新的外鍵表,觸發器也不用重新編輯:


SQL> CREATE TABLE T_C1 (ID NUMBER, FID NUMBER, CONSTRAINT FK_T_C1?
2 FOREIGN KEY (FID) REFERENCES T_P);


表已創建。


SQL> INSERT INTO T_C1 VALUES (1, 3);


已創建 1 行。


SQL> UPDATE T_P SET ID = 1 WHERE ID = 3;


已更新 1 行。


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


SQL> SELECT * FROM T_C1;


ID FID
---------- ----------
1 1


小議Oracle外鍵約束修改行為(五)
Oracle的外鍵用來限制子表中參考的字段的值,必須在主表中存在。而且在主表的記錄發生變化導致外鍵參考唯一約束值發生了變化時,定義了一系列的動作。


這篇描述一下如何實現UPDATE SET NULL。


小議Oracle外鍵約束修改行為(一):http://yangtingkun.itpub.net/post/468/478045


小議Oracle外鍵約束修改行為(二):http://yangtingkun.itpub.net/post/468/478119


小議Oracle外鍵約束修改行為(三):http://yangtingkun.itpub.net/post/468/478172


小議Oracle外鍵約束修改行為(四):http://yangtingkun.itpub.net/post/468/478280






前面幾篇文章介紹了Oracle所支持的3種約束行為NO ACTION、DELETE SET NULL和DELETE CASCADE。


至于SQL標準中定義的其他操作,Oracle只能通過觸發器來實現,這里給出一個簡單的UPDATE SET NULL操作的例子。


SQL> DROP TABLE T_C;


表已刪除。


SQL> DROP TABLE T_P;


表已刪除。


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_C
2 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;


提交完成。


檢查一下直接更新操作:


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


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> CREATE OR REPLACE TRIGGER T_P_SET_NULL?
2 BEFORE UPDATE OF ID ON T_P?
3 FOR EACH ROW
4 WHEN (NVL(NEW.ID, -1) != NVL(OLD.ID, -1))
5 DECLARE
6 V_STR VARCHAR2(32767);
7 BEGIN
8 FOR I IN (SELECT OWNER, TABLE_NAME, CONSTRAINT_NAME?
9 FROM ALL_CONSTRAINTS
10 WHERE CONSTRAINT_TYPE = 'R'
11 AND R_OWNER = 'YANGTK'
12 AND R_CONSTRAINT_NAME IN?
13 (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'T_P'))
14 LOOP
15 V_STR := 'UPDATE ' || I.TABLE_NAME || ' SET ';?
16 FOR J IN (SELECT COLUMN_NAME FROM ALL_CONS_COLUMNS?
17 WHERE OWNER = I.OWNER
18 AND TABLE_NAME = I.TABLE_NAME?
19 AND CONSTRAINT_NAME = I.CONSTRAINT_NAME)?
20 LOOP
21 V_STR := V_STR || J.COLUMN_NAME || ' = NULL '
22 || 'WHERE ' || J.COLUMN_NAME || ' = ' || :OLD.ID;
23 END LOOP;
24 EXECUTE IMMEDIATE V_STR;
25 END LOOP;
26 END;
27 /


觸發器已創建


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


SQL> UPDATE T_P SET ID = 3 WHERE ID = 1;


已更新 1 行。


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
3 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 A


UPDATE SET NULL操作其實和UPDATE CASCADE很相似,不同之處無非是一個置為NULL,另一個置為主鍵的新值。


小議Oracle外鍵約束修改行為(六)
Oracle的外鍵用來限制子表中參考的字段的值,必須在主表中存在。而且在主表的記錄發生變化導致外鍵參考唯一約束值發生了變化時,定義了一系列的動作。


這篇描述一下如何實現SET DEFAULT。


小議Oracle外鍵約束修改行為(一):http://yangtingkun.itpub.net/post/468/478045


小議Oracle外鍵約束修改行為(二):http://yangtingkun.itpub.net/post/468/478119


小議Oracle外鍵約束修改行為(三):http://yangtingkun.itpub.net/post/468/478172


小議Oracle外鍵約束修改行為(四):http://yangtingkun.itpub.net/post/468/478280


小議Oracle外鍵約束修改行為(五):http://yangtingkun.itpub.net/post/468/478374






前面幾篇文章介紹了Oracle所支持的3種約束行為NO ACTION、DELETE SET NULL和DELETE CASCADE。


至于SQL標準中定義的其他操作,Oracle只能通過觸發器來實現,這里給出一個簡單的SET DEFAULT操作的例子。


SQL> DROP TABLE T_C;


表已刪除。


SQL> DROP TABLE T_P;


表已刪除。


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_C
2 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;


提交完成。


檢查一下直接更新操作:


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


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> CREATE OR REPLACE TRIGGER T_P_SET_DEFAULT?
2 BEFORE DELETE OR UPDATE OF ID ON T_P
3 FOR EACH ROW
4 WHEN (NVL(NEW.ID, -1) != NVL(OLD.ID, -1))
5 DECLARE
6 V_STR VARCHAR2(32767);
7 BEGIN
8 FOR I IN (SELECT OWNER, TABLE_NAME, CONSTRAINT_NAME?
9 FROM ALL_CONSTRAINTS
10 WHERE CONSTRAINT_TYPE = 'R'
11 AND R_OWNER = 'YANGTK'
12 AND R_CONSTRAINT_NAME IN?
13 (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'T_P'))
14 LOOP
15 V_STR := 'UPDATE ' || I.TABLE_NAME || ' SET ';?
16 FOR J IN (SELECT A.COLUMN_NAME, B.DATA_DEFAULT
17 FROM ALL_CONS_COLUMNS A, ALL_TAB_COLUMNS B
18 WHERE A.OWNER = I.OWNER
19 AND B.OWNER = I.OWNER
20 AND A.TABLE_NAME = I.TABLE_NAME
21 AND B.TABLE_NAME = I.TABLE_NAME?
22 AND A.COLUMN_NAME = B.COLUMN_NAME
23 AND CONSTRAINT_NAME = I.CONSTRAINT_NAME)?
24 LOOP
25 V_STR := V_STR || J.COLUMN_NAME || ' = ' || J.DATA_DEFAULT?
26 || ' WHERE ' || J.COLUMN_NAME || ' = ' || :OLD.ID;
27 END LOOP;
28 EXECUTE IMMEDIATE V_STR;
29 END LOOP;
30 END;
31 /


觸發器已創建


SQL> ALTER TABLE T_C MODIFY FID DEFAULT 2;


表已更改。


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
1 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 1 A


SQL> UPDATE T_P SET ID = 3 WHERE ID = 1;


已更新 1 行。


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
3 A
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- ------------------------------
1 2 A


下面檢查一下DELETE操作是否有效:


SQL> UPDATE T_C SET FID = 3;


已更新 1 行。


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- -----------------------------
1 3 A


SQL> DELETE T_P WHERE ID = 3;


已刪除 1 行。


SQL> SELECT * FROM T_P;


ID NAME
---------- ------------------------------
2 B


SQL> SELECT * FROM T_C;


ID FID NAME
---------- ---------- -----------------------------
1 2 A


小議Oracle外鍵約束修改行為(七)


上一篇 / 下一篇 ?2009-02-13 22:05:02 / 個人分類:ORACLE
查看( 131 ) / 評論( 0 ) / 評分( 0 / 0 )
Oracle的外鍵用來限制子表中參考的字段的值,必須在主表中存在。而且在主表的記錄發生變化導致外鍵參考唯一約束值發生了變化時,定義了一系列的動作。
這篇描述一下如何實現RESTRICT。
小議Oracle外鍵約束修改行為(一):http://yangtingkun.itpub.net/post/468/478045
小議Oracle外鍵約束修改行為(二):http://yangtingkun.itpub.net/post/468/478119
小議Oracle外鍵約束修改行為(三):http://yangtingkun.itpub.net/post/468/478172
小議Oracle外鍵約束修改行為(四):http://yangtingkun.itpub.net/post/468/478280
小議Oracle外鍵約束修改行為(五):http://yangtingkun.itpub.net/post/468/478374
小議Oracle外鍵約束修改行為(六):http://yangtingkun.itpub.net/post/468/478437
?
?
前面幾篇文章介紹了Oracle所支持的3種約束行為NO ACTION、DELETE SET NULL和DELETE CASCADE。
至于SQL標準中定義的其他操作,Oracle只能通過觸發器來實現,這里給出一個簡單的RESTRICT操作的例子。
SQL> DROP TABLE T_C;


表已刪除。


SQL> DROP TABLE T_P;


表已刪除。


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_C
??2 ?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;


提交完成。


SQL標準定義的RESTRICT操作其實和NO ACTION操作十分類似。不同之處在于,RESTRICT的檢查在語句執行之前,一旦發現主鍵被引用,就會報錯,阻止更新或刪除操作的執行。
SQL> SELECT * FROM T_P;


?? ? ? ?ID NAME
---------- ------------------------------
?? ? ? ?1 A
?? ? ? ? 2 B


SQL> SELECT * FROM T_C;


?? ? ? ?ID ? ? ? ?FID NAME
---------- ---------- ------------------------------
?? ? ? ? 1 ? ? ? ? 1 A


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) -已找到子記錄日志


對于上面這種情況,無論是NO ACTION還是RESTRICT,效果沒有什么差別,而對于下面的情況就不一樣了:
SQL> UPDATE T_P SET ID = ID - 1;


已更新2行。


SQL> SELECT * FROM T_P;


?? ? ? ?ID NAME
---------- ------------------------------
?? ? ? ?0 A
?? ? ? ? 1 B


SQL> UPDATE T_P SET ID = ID + 1;


已更新2行。


SQL> SELECT * FROM T_P;


?? ? ? ?ID NAME
---------- ------------------------------
?? ? ? ?1 A
?? ? ? ? 2 B


對于NO ACTION來說,約束的檢查發生在語句之后,所有上面的語句可以順利執行,而對于RESTRICT而言,這個操作會直接報錯。
下面構建一個RESTRICT操作的觸發器:
SQL> CREATE OR REPLACE TRIGGER T_P_RESTRICT
??2 ?BEFORE DELETE OR UPDATE OF ID ON T_P
??3 ?FOR EACH ROW
??4 ?WHEN (NVL(NEW.ID, -1) != NVL(OLD.ID, -1))
??5 ?DECLARE
??6 ? V_STR VARCHAR2(32767);
??7 ? V_COUNT NUMBER;
??8 ?BEGIN
??9 ? FOR I IN (SELECT OWNER, TABLE_NAME, CONSTRAINT_NAME
?10 ? ?FROM ALL_CONSTRAINTS
?11 ? ?WHERE CONSTRAINT_TYPE = 'R'
?12 ? ?AND R_OWNER = 'YANGTK'
?13 ? ?AND R_CONSTRAINT_NAME IN
?14 ? ? (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'T_P'))
?15 ? LOOP
?16 ? ?V_STR := 'SELECT COUNT(*) FROM ?' || I.TABLE_NAME || ' WHERE ';?
?17 ? ?FOR J IN (SELECT COLUMN_NAME FROM ALL_CONS_COLUMNS
?18 ? ? WHERE WNER = I.OWNER
?19 ? ? AND TABLE_NAME = I.TABLE_NAME
?20 ? ? AND CONSTRAINT_NAME = I.CONSTRAINT_NAME)
?21 ? ?LOOP
?22 ? ? V_STR := V_STR || J.COLUMN_NAME || ' = ' || :OLD.ID;
?23 ? ?END LOOP;
?24 ? ?EXECUTE IMMEDIATE V_STR INTO V_COUNT;
?25 ? ?IF V_COUNT > 0 THEN
?26 ? ? RAISE_APPLICATION_ERROR(-20001, '違反完整約束條件限制操作-已找到子記錄日志');
?27 ? ?END IF;
?28 ? END LOOP;
?29 ?END;
?30 ?/


觸發器已創建


SQL> SELECT * FROM T_P;


?? ? ? ?ID NAME
---------- ------------------------------
?? ? ? ?1 A
?? ? ? ? 2 B


SQL> SELECT * FROM T_C;


?? ? ? ?ID ? ? ? ?FID NAME
---------- ---------- ------------------------------
?? ? ? ? 1 ? ? ? ? 1 A


SQL> UPDATE T_P SET ID = ID - 1;
UPDATE T_P SET ID = ID - 1
?? ? ? ? ? ? ? ? ? *
第1行出現錯誤:
ORA-20001:違反完整約束條件限制操作-已找到子記錄日志
ORA-06512:在"YANGTK.T_P_RESTRICT", line 22
ORA-04088:觸發器'YANGTK.T_P_RESTRICT'執行過程中出錯


這種方式可以實現RESTRICT操作,但是對于其他會話的外鍵的引用,RESTRICT操作是看不到的:
SQL> CONN YANGTK/YANGTK@YTK92
已連接。
SQL> SET SQLP 'SQL2> '
SQL2> INSERT INTO T_C VALUES (2, 2, 'B');


已創建1行。


在另一個會話插入一條參考主表ID為2的記錄,且不提交,這時在主表更新或刪除ID為2的記錄時,會被鎖住,RESTRICT操作不會起作用,因為這時看不到其他用戶未提交的修改:
SQL> DELETE T_P WHERE ID = 2;


而如果在第二個會話中提交事務:
SQL2> COMMIT;


提交完成。


則RESTRICT操作會起作用,因為這時已經提交,而當前的會話是可以看到其他會話中已提交數據的:
DELETE T_P WHERE ID = 2
?? ? ? ? ? ? ? ? ? *
第1行出現錯誤:
ORA-20001:違反完整約束條件限制操作-已找到子記錄日志
ORA-06512:在"YANGTK.T_P_RESTRICT", line 22
ORA-04088:觸發器'YANGTK.T_P_RESTRICT'執行過程中出錯




SQL>


總結

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

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

一本一道久久a久久精品 | 亚洲精选国产 | 综合视频在线 | 97在线免费视频观看 | 国产一区麻豆 | 亚洲国产大片 | 人人爽久久久噜噜噜电影 | 成人手机在线视频 | 亚洲婷婷丁香 | 免费日韩在线 | 久久精品综合视频 | 最新99热| 久久精品最新 | 国产91国语对白在线 | 激情网站 | 天天天天天天天操 | 久久性生活片 | 久久久国产在线视频 | 色综合色综合久久综合频道88 | 日韩国产欧美视频 | 又黄又爽又无遮挡的视频 | 色悠悠久久综合 | 九九热精品视频在线观看 | 国产成人一区在线 | 麻豆高清免费国产一区 | av免费片 | 国产精品国产三级国产aⅴ9色 | 国产黄影院色大全免费 | 成人avav| 亚洲第一区精品 | 午夜久久电影网 | 激情欧美丁香 | 欧美日韩一区二区在线观看 | 国产精品麻豆91 | 免费在线观看av的网站 | 激情综合五月婷婷 | 最新av网址大全 | 91人人视频在线观看 | 激情喷水 | 精品1区2区 | 欧美性另类 | 久久久久国产精品午夜一区 | 99视频精品视频高清免费 | 亚洲国产精品成人av | 在线看小早川怜子av | 色五月成人 | 超碰人人超 | 99视频免费观看 | 日本久久99| 激情开心色 | 婷婷av电影 | 亚洲男人天堂a | 最新av网址在线 | 久草精品视频 | 91av视屏 | 日韩免费网址 | 人人爽人人爽人人 | 77国产精品 | 日日夜夜免费精品视频 | 碰超在线97人人 | 国产精品二区在线 | 亚洲精品乱码久久久久久 | 色就是色综合 | 欧洲精品码一区二区三区免费看 | 久久亚洲视频 | 色多多在线观看 | 国产精品成人国产乱一区 | 高清视频一区二区三区 | 91精品一区二区在线观看 | 在线 视频 亚洲 | 成人在线免费观看视视频 | 欧美精品v国产精品 | 欧美黑人性猛交 | 亚洲一区日韩精品 | 久久香蕉影视 | 黄色av在 | 91精彩视频 | 成人 亚洲 欧美 | 激情中文在线 | 久久久久视| 成人97人人超碰人人99 | 激情综合中文娱乐网 | 午夜视频二区 | 久久a v电影 | 成人免费在线观看电影 | 成人欧美一区二区三区黑人麻豆 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 亚洲国产成人久久综合 | 亚洲精品一区二区三区四区高清 | 成人动漫一区二区 | 亚洲成人黄色av | 一本一本久久a久久精品牛牛影视 | 色瓜| 黄色大全免费网站 | 99国产精品免费网站 | 亚洲日本色 | 久久久福利 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 天天天操天天天干 | 91在线播放综合 | 青青草在久久免费久久免费 | 国产女人40精品一区毛片视频 | 久久精品中文字幕一区二区三区 | 99久久精品久久久久久动态片 | 波多野结衣电影一区 | 久久综合影视 | 国产成人精品在线 | 日韩av偷拍 | 日韩一区二区三免费高清在线观看 | 亚洲国产欧美在线人成大黄瓜 | 日韩电影在线视频 | 国产精品ssss在线亚洲 | 激情开心 | 操操操日日日干干干 | 久草精品国产 | 国产黄色在线看 | 激情欧美日韩一区二区 | 国产免费一区二区三区最新 | 97热视频 | 99性视频 | 菠萝菠萝在线精品视频 | 一区二区三区在线电影 | 亚洲精品资源在线观看 | 国产日韩在线播放 | 国产99区 | 亚洲 综合 国产 精品 | 国产又粗又猛又黄 | 免费中文字幕 | 999久久久 | 免费观看一级成人毛片 | 国产精品一二 | 欧美精品在线一区 | 亚洲成人精品在线观看 | 亚洲视频1区2区 | 久久免费视频一区 | 国产一区二区中文字幕 | 亚洲成a人片在线观看网站口工 | 天堂网中文在线 | 国产色视频网站2 | 麻豆视频免费在线 | 天天操夜夜操天天射 | 亚洲成av人片 | 在线视频 你懂得 | 亚洲一区二区黄色 | 国产精品毛片一区二区 | 欧美激情另类 | 黄色三级免费观看 | 91一区一区三区 | 久久美女免费视频 | 国产精品久久久久久五月尺 | 亚洲视频电影在线 | 色婷婷天天干 | 99久久这里只有精品 | 免费h视频| 欧美日本中文字幕 | 亚洲国产精品一区二区久久,亚洲午夜 | 91在线精品播放 | 射久久久| 国产精品白虎 | 蜜臀久久99精品久久久无需会员 | 免费在线观看一级片 | 久久深爱网 | 一区二区三区福利 | 国产99久久久国产精品 | 精品国产乱码久久 | 久久影视网 | 中文字幕 国产视频 | 久久线视频 | 亚洲精品a区 | 中文字幕资源网在线观看 | 欧美另类v| 午夜视频在线瓜伦 | 天天天色综合a | 亚洲91精品 | 国产黄色免费观看 | 欧美激情精品久久久久久免费印度 | 亚洲精品伦理在线 | 成人黄色在线 | 91在线观看高清 | 成人网大片 | 成人电影毛片 | 在线视频福利 | 久久亚洲私人国产精品 | 国产精品免费不 | 久草在线这里只有精品 | 日韩一三区 | 亚洲精品18日本一区app | 国产精品成人av久久 | 国产精品视频 | 在线高清一区 | 久久精品网站免费观看 | 亚洲午夜小视频 | 涩涩资源网 | 成人毛片网| 亚洲九九九在线观看 | 日韩a级免费视频 | 免费亚洲成人 | 色欧美88888久久久久久影院 | 久久夜色网 | 免费在线观看日韩欧美 | 日韩免费电影一区二区三区 | 黄色在线视频网址 | 中文字幕a∨在线乱码免费看 | 毛片视频网址 | 91女神的呻吟细腰翘臀美女 | 天天操夜夜拍 | 九九久久久久久久久激情 | 国产婷婷在线观看 | www.人人干| 久久一区二区三区国产精品 | 在线导航av | 国产区精品 | 国产视频美女 | 国产又粗又猛又黄又爽的视频 | 俺要去色综合狠狠 | 久久精品激情 | 亚洲成人蜜桃 | 国产日韩欧美网站 | 亚洲国产合集 | 中文字幕在线观看不卡 | 色久综合 | 精品伦理一区二区三区 | 久久久久欧美精品 | 亚州精品国产 | 夜夜夜夜夜夜操 | 国产精品一区在线观看 | 久久男女视频 | 久久久久久久久久毛片 | www.久久久精品 | 免费在线91 | 91成人区 | 欧美另类高清 | 国产精品久一 | 伊人在线视频 | 欧美日韩aaaa | 国产福利不卡视频 | 欧美一级片免费播放 | 三级免费黄色 | 日日夜夜操操操操 | 日韩精品一区二区三区在线播放 | 91尤物国产尤物福利在线播放 | 国产精品免费不 | 国产成人一二片 | 国产成人香蕉 | 91精品毛片| 久久国产精品免费一区二区三区 | 国产自产在线视频 | 日本精品在线视频 | 九九热免费视频在线观看 | 国产91综合一区在线观看 | 久久激情五月丁香伊人 | 国产精品乱码一区二区视频 | 日韩a免费| 51久久夜色精品国产麻豆 | 免费av网址大全 | 国产亚洲婷婷 | 色夜影院 | 午夜黄色一级片 | 99中文视频在线 | 国产一级片免费观看 | 又黄又爽免费视频 | 91看片淫黄大片在线播放 | 日韩视频免费 | a级成人毛片 | 麻豆视频免费播放 | 国产亲近乱来精品 | 亚洲欧洲日韩在线观看 | 国产成人一区三区 | 丁香婷婷综合激情五月色 | 成年人天堂com | 六月激情 | 在线观看黄 | 极品久久久久久久 | 日韩av免费大片 | 亚洲精品在线免费播放 | 中文字幕精品一区久久久久 | 色亚洲网 | 91精品亚洲影视在线观看 | 九色91av| 五月综合激情网 | 国产精品久久久久久久久久了 | 我爱av激情网 | 国产精品久久久久久久午夜片 | 日韩免费中文字幕 | 亚州精品在线视频 | 亚洲精品小视频 | 91久久国产自产拍夜夜嗨 | 91成人免费看片 | 国产精品久久久一区二区三区网站 | 久久美女高清视频 | 午夜视频免费 | 国产精品一区二区三区99 | 中日韩三级视频 | 国产成人在线观看 | 深爱开心激情网 | 午夜国产在线 | 色综合网 | 国产成年免费视频 | 99精品久久只有精品 | 成年人在线观看视频免费 | 91大神精品视频在线观看 | 区一区二在线 | 91久久精品日日躁夜夜躁国产 | 久综合网 | 国产一区视频免费在线观看 | 男女免费视频观看 | 69视频在线播放 | 久久在线精品 | av黄色免费看| 狠狠色噜噜狠狠 | 久久人人爽人人爽人人 | 综合久久五月天 | 精品女同一区二区三区在线观看 | 丝袜美女在线 | 久久久免费播放 | 狠狠色丁香婷婷综合视频 | 成人国产精品久久久 | 91麻豆精品一区二区三区 | 欧美韩国日本在线观看 | 激情五月六月婷婷 | 手机av电影在线观看 | 丝袜少妇在线 | 国产精品久久久久久久久久免费看 | 国内精品久久久久国产 | 91色网址| 国产在线a不卡 | 国产一线在线 | 97在线视频观看 | 久久涩视频 | 欧美一级看片 | 国产成人黄色在线 | 亚洲国产视频网站 | 在线一区电影 | 国产精品毛片一区视频播 | 爱色婷婷 | 国产69精品久久app免费版 | 午夜视频在线观看一区二区三区 | av高清一区二区三区 | 三上悠亚一区二区在线观看 | 色播五月激情综合网 | www一起操 | 国内精品视频在线 | 日韩精品在线免费播放 | 香蕉影视app| 国产99久久九九精品免费 | 国产福利一区二区三区视频 | 婷婷色中文字幕 | 全久久久久久久久久久电影 | 国产精品久久久久影视 | 999在线观看视频 | 婷婷丁香在线 | 久久视频精品在线观看 | 天堂av免费观看 | 精品一区二区三区香蕉蜜桃 | 亚洲综合干 | 在线观看av麻豆 | 精品国产自在精品国产精野外直播 | 亚洲精品久久久久58 | 激情五月综合 | 精品一区 精品二区 | 久久96 | 久久久久亚洲精品成人网小说 | 久久超碰网 | 亚洲精选视频在线 | 色88久久 | 亚洲高清资源 | 日本久久久久久科技有限公司 | 天天综合网 天天 | 国产专区一 | 国产视频精品视频 | 国产高清av免费在线观看 | 成人免费看视频 | 91一区啪爱嗯打偷拍欧美 | 欧美大片大全 | 天堂网中文在线 | 黄色天堂在线观看 | 午夜视频播放 | 国产一级二级三级在线观看 | 成人a在线 | 欧美一级片在线免费观看 | 最新日韩精品 | 人人搞人人搞 | 在线成人短视频 | 久久精品一区二区三区中文字幕 | 综合网av| 国产黄大片 | 国产精品6999成人免费视频 | 国产精品理论在线观看 | 91麻豆精品国产91久久久久 | 久草视频在线免费 | 婷婷日日| 天天干 天天摸 天天操 | 国产精品一区免费观看 | 高清不卡毛片 | 涩av在线| 国内精品久久久久影院一蜜桃 | 国产免费嫩草影院 | 99久久精品一区二区成人 | 精品国产一区二区在线 | 欧美性色综合网站 | av福利在线导航 | 在线免费观看国产视频 | 免费网址在线播放 | 亚洲伦理一区二区 | 亚洲高清视频一区二区三区 | 黄色毛片大全 | 中文字幕免费成人 | 久久综合精品国产一区二区三区 | 欧美日韩精品影院 | 麻豆久久一区 | 亚洲一区二区麻豆 | 国产男女爽爽爽免费视频 | 精品久久久久久久久亚洲 | 奇米影视777四色米奇影院 | 亚洲人成在线观看 | 九九综合九九 | 国产精品福利一区 | 天天草天天操 | 国产精品久久精品 | www.在线观看av | 亚洲国产精品一区二区久久hs | 久草干 | 成人蜜桃网 | 欧美日韩高清在线观看 | 国产精品久久嫩一区二区免费 | 亚洲综合欧美日韩狠狠色 | 狠狠干激情 | 天天插天天色 | 欧美日韩高清在线一区 | 99re6热在线精品视频 | 99re8这里有精品热视频免费 | 中文av在线免费观看 | 国产精品久久久久影院日本 | www.777奇米 | 在线视频欧美日韩 | 在线观看av的网站 | 国产亚洲在线观看 | 欧美精品久久久久久 | 亚洲视频综合在线 | 久久男人免费视频 | 国产视频 亚洲精品 | 视频福利在线观看 | 五月天久久久久久 | 精品亚洲视频在线观看 | 午夜精品一区二区三区视频免费看 | 亚洲国产视频a | 国产精品久久久久久久久婷婷 | 在线黄av | 欧美日韩不卡一区二区三区 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产免费区 | 亚洲免费一级电影 | 99日精品 | 日本黄色黄网站 | 97电影手机版 | 一级精品视频在线观看宜春院 | 日韩高清一 | 天天碰天天操 | 2017狠狠干 | 午夜av在线电影 | 中文字幕 欧美性 | 中文字幕电影网 | 亚洲国产欧美在线人成大黄瓜 | 日韩动漫免费观看高清完整版在线观看 | 天堂av网在线| 丝袜少妇在线 | 99久久久久久久久 | 91精品第一页 | 久久国产免费看 | 国产一二三区在线观看 | 国产不卡毛片 | 精品视频亚洲 | 91香蕉嫩草 | 91视频观看免费 | 日韩在线二区 | av福利在线免费观看 | 美女视频黄色免费 | 天天天操天天天干 | 欧美99久久 | 久久99视频精品 | 亚洲aⅴ免费在线观看 | 亚洲高清在线 | 国产又黄又爽无遮挡 | av色图天堂网 | 国产又黄又爽又猛视频日本 | 免费av小说 | 日日干日日色 | 99在线观看免费视频精品观看 | 亚洲人av免费网站 | 性色av一区二区 | 国产在线看 | 欧洲精品在线视频 | 精品欧美乱码久久久久久 | 夜夜躁日日躁狠狠久久av | 国产黄色av网站 | 日韩成人精品一区二区 | 嫩草91影院| 亚洲精品永久免费视频 | 亚洲高清国产视频 | 国产品久精国精产拍 | 国产成人久久av977小说 | 伊人小视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 黄色一级在线免费观看 | 日韩精品一区二区在线观看 | 亚洲免费激情 | 欧美久久久一区二区三区 | 国产视频精品久久 | 免费黄色a网站 | 日操操| 色综合久久久久综合 | 天天干夜夜夜 | 五月婷婷丁香综合 | 欧美久久久久久久久久久久久 | 久久毛片高清国产 | 五月在线视频 | 狠狠的干狠狠的操 | 狠狠色丁香久久婷婷综 | 国产一二三精品 | 国产黄色视| 国产小视频在线免费观看视频 | 日韩视| 亚洲色图色 | 91久久黄色 | 国产综合福利在线 | 中文字幕免费高清在线 | 天天干天天操天天爱 | 国产综合福利在线 | 天天干天天做天天操 | 91免费观看视频网站 | 日日干天天操 | 天天爽综合网 | 午夜精品久久久久久久久久久 | 日本黄色a级大片 | 久草在线视频首页 | 日韩精品aaa | 日韩精品一区不卡 | 国产黄色视 | 色综合久久久久网 | 日韩高清在线一区二区 | 国产精品毛片一区二区在线看 | 99 久久久久 | 97理论电影 | 午夜视频99 | 综合色站导航 | 久久久久久久久久久影院 | 超碰在线1 | 国产精品久久久久久久久费观看 | 五月婷香蕉久色在线看 | 成人免费观看av | 中文字幕制服丝袜av久久 | 在线观看视频亚洲 | 国产资源网 | 97天堂 | 狠狠色丁香久久综合网 | 天天综合网 天天 | 欧美孕交vivoestv另类 | 国产黄 | 国际精品久久久 | 天天操天天操天天操 | 久久伊人五月天 | 808电影免费观看三年 | 美女视频黄频大全免费 | 日躁夜躁狠狠躁2001 | 五月婷婷伊人网 | 一区二区三区日韩在线 | av免费在线观 | 激情久久久久 | 深爱五月激情网 | 色天堂在线视频 | 久久久久免费视频 | 国产小视频在线看 | 成人三级网址 | 亚洲美女视频网 | 99久久超碰中文字幕伊人 | 天天干.com| 91精品国产自产老师啪 | 色在线免费观看 | 九九精品久久久 | 精品视频99 | 久久久久激情 | 亚洲激情av| 97视频网址 | 成年人视频免费在线播放 | 亚洲一区不卡视频 | 中文字幕日韩伦理 | 婷婷在线观看视频 | 久久精品国产99 | 黄色网大全 | 午夜国产福利视频 | 久久免费在线 | 色wwwww | 97自拍超碰| 国产精选在线观看 | 在线免费视频 你懂得 | 亚洲激情婷婷 | 午夜精品久久久久久 | 免费网站看v片在线a | 免费在线观看av的网站 | 在线观看中文字幕 | 久久在线免费观看视频 | 在线影院中文字幕 | 黄网站app在线观看免费视频 | 91视频久久久久 | 国产91学生粉嫩喷水 | 国内小视频在线观看 | 成片免费观看视频 | 国产91免费看 | 丁香六月中文字幕 | 日韩精品一区二区不卡 | 91精品伦理 | 国产中文字幕网 | 免费大片黄在线 | 又黄又爽又湿又无遮挡的在线视频 | 5月丁香婷婷综合 | 久久手机看片 | 色九九影院| 久久婷婷一区二区三区 | 草久在线观看视频 | 狠狠狠狠狠色综合 | 国产精品国产三级国产专区53 | av+在线播放在线播放 | 黄色av电影在线 | 亚洲日本欧美在线 | 亚洲,播放 | 久久久久 免费视频 | 成人av影院在线观看 | 人人爽人人干 | 欧美日韩一区二区三区不卡 | 免费一级片在线观看 | 日本中文字幕在线免费观看 | 久在线观看视频 | 丁香六月婷婷激情 | 少妇bbb | 我爱av激情网 | 中文字幕韩在线第一页 | 日韩91在线 | 天天艹| 久久少妇 | 四虎最新入口 | 久草免费在线观看视频 | 欧美激情综合五月 | 久久免费av电影 | 在线观看中文字幕dvd播放 | 东方av在| 国产成人一区二区啪在线观看 | 久草久草视频 | 国产一级片在线播放 | 免费在线一区二区 | 色婷婷av在线 | 日韩激情影院 | 九色91av| 国产又粗又猛又色又黄网站 | 国产黄色看片 | 日韩亚洲在线观看 | 成人高清在线观看 | 午夜精品中文字幕 | av成人在线电影 | 狠狠狠色 | 99久久久久久久久久 | 三上悠亚在线免费 | 国产性天天综合网 | 日韩欧美一区二区不卡 | 香蕉视频18 | 青春草视频在线播放 | 青青五月天 | 免费观看91视频大全 | 日韩精品一区二区三区丰满 | 中文字幕在线观看2018 | 国产精品白浆 | 在线看片成人 | 91成人在线视频观看 | 国产综合视频在线观看 | 国产精品久久久久999 | 日韩手机视频 | 国产成人精品亚洲a | av一区二区三区在线观看 | 婷婷丁香六月天 | aa级黄色大片 | 国产成人精品久久久久蜜臀 | 在线观看激情av | 欧美天天综合网 | 337p日本大胆噜噜噜噜 | 日本爱爱免费视频 | 久久成人一区二区 | 欧美日韩1区| 国外调教视频网站 | 福利网在线 | 8090yy亚洲精品久久 | 亚洲在线资源 | 91爱看片 | 免费观看久久 | 中文字幕久久精品亚洲乱码 | a在线视频v视频 | 欧美色噜噜 | 精品久久精品久久 | 国产精品九九久久久久久久 | 2019中文最近的2019中文在线 | 国产福利免费看 | 免费看高清毛片 | 亚洲成人免费在线观看 | 在线直播av | 青青久草在线 | 69精品视频在线观看 | 免费观看性生交大片3 | 国产亚洲综合精品 | 中文在线免费视频 | 91传媒在线看 | 亚洲精品视频网 | 五月天亚洲综合 | 激情动态| 欧美va天堂在线电影 | 久久精品中文字幕 | 国产精品久久久久久久久久尿 | 免费av网站观看 | 视频一区二区国产 | 米奇影视7777 | 最新免费中文字幕 | 91在线九色 | 亚洲黄网站 | av九九| 国产精品三级视频 | 国产a国产| 五月宗合网 | 久久精品久久精品久久39 | av免费看av | 色a综合 | 国产视频二区三区 | va视频在线| a在线观看视频 | 精品久久久久久亚洲综合网站 | 亚洲精品国产精品久久99热 | 国产精品美女999 | 久久香蕉国产精品麻豆粉嫩av | 日韩视频1 | 99国产精品免费网站 | 探花视频在线观看 | 久久久久久美女 | 六月丁香色婷婷 | 96看片 | 婷婷亚洲五月 | 国产偷在线 | 91精品伦理| 精品一区二区视频 | 亚洲电影图片小说 | 91桃色免费观看 | 亚洲天堂视频在线 | 国产中出在线观看 | 久久a v视频 | 91精品视频免费看 | 日韩在线视频免费观看 | 综合久久精品 | 五月天天天操 | 狠狠色噜噜狠狠狠合久 | 欧美夫妻生活视频 | 日日夜夜天天 | 日本美女xx | 久久亚洲福利视频 | 天天干天天操天天爱 | 亚洲欧洲精品一区 | 特黄特黄的视频 | 欧美a级片免费看 | 国产一级淫片免费看 | 成人网在线免费视频 | 久久综合色天天久久综合图片 | 免费在线观看av网址 | 99色国产| 国产xxxx做受性欧美88 | 人人澡人人爽欧一区 | 超碰午夜 | 成人国产亚洲 | 婷婷av色综合 | 综合国产在线观看 | 成人免费在线视频 | 91在线蜜桃臀 | 亚洲精选久久 | 99国产视频在线 | 日韩精品欧美视频 | 99人久久精品视频最新地址 | 国产剧情一区二区 | 五月婷综合网 | 一区二区三区四区在线 | 精品国产伦一区二区三区观看说明 | 九九九热精品免费视频观看 | 天天干天天操天天入 | 亚洲国产精品一区二区久久hs | 午夜视频不卡 | 亚洲永久av | 182午夜在线观看 | 国产亚洲精品av | 天天干天天操天天搞 | 成片免费观看视频999 | 久草免费福利在线观看 | 久久久免费毛片 | 少妇搡bbbb搡bbb搡69 | 久久av观看| 色综合久久中文综合久久牛 | 伊人五月综合 | 午夜精品一区二区三区免费 | 久国产在线播放 | 在线观看视频中文字幕 | 成人黄色片免费看 | 亚洲闷骚少妇在线观看网站 | 久久日本视频 | 国产99久久久精品 | 亚洲国内精品在线 | aa级黄色大片| 狠狠干综合网 | 国产精品久久久一区二区 | 日韩在线三级 | 97综合视频 | 国产老妇av | 色婷婷av在线 | av一级久久| 国产精品手机在线播放 | 国产精品视频久久 | 国产精品网在线观看 | 日韩动态视频 | 51久久成人国产精品麻豆 | 色偷偷97| 亚洲2019精品 | 欧美久久久一区二区三区 | 天天色天天 | 夜色在线资源 | 欧美淫视频| 天天操操操操操操 | 国产一级视频 | 中文字幕色在线视频 | 亚洲国产字幕 | 91av手机在线观看 | 91色在线观看 | 免费看国产黄色 | 免费成人在线观看 | av天天干 | 99精品免费在线 | 9999在线观看 | 97在线精品国自产拍中文 | 人人澡av | 又黄又爽又色无遮挡免费 | 中文字幕亚洲综合久久五月天色无吗'' | 色老板在线视频 | 久草国产在线观看 | 久久中文字幕视频 | 在线国产精品一区 | av线上看 | ,久久福利影视 | 亚洲国产福利视频 | 青青河边草免费视频 | 久久国产欧美日韩精品 | 久久精品79国产精品 | 高清不卡免费视频 | 免费日韩视频 | 四虎永久免费网站 | 色综合久久天天 | 日韩免费一区二区 | 欧美精品久久久久久久久久白贞 | 日日久视频 | 午夜精品视频一区 | 久久免费观看少妇a级毛片 久久久久成人免费 | 亚州av成人 | 日本久久91 | 久草精品视频在线观看 | 中文字幕在线观看完整版 | av在线网站免费观看 | 国产伦理一区 | 玖玖在线资源 | 麻豆传媒在线视频 | 成人高清在线观看 | 国产在线精品一区二区不卡了 | 久久公开免费视频 | 日本h视频在线观看 | 九九九免费视频 | 日韩一区二区三区不卡 | 亚洲粉嫩av | 一区二区欧美激情 | 国产第一页在线观看 | 亚洲一级影院 | 日本黄色大片儿 | 天天干天天弄 | 在线a视频免费观看 | 成人日批视频 | 色综合天天射 | 精品一区三区 | 亚洲精品久久久蜜桃 | 国产 日韩 在线 亚洲 字幕 中文 | 久久久久女人精品毛片 | 国产免费影院 | av在线播放国产 | 一级免费观看 | 久久人人爽人人人人片 | 视频在线99 | 免费的黄色的网站 | 六月激情网 | 国产首页 | 久久一级电影 | japanese黑人亚洲人4k | 丁香婷婷在线 | 97人人爽| 99国产精品久久久久久久久久 | 美女视频免费一区二区 | 久久久精品久久 | 最近中文字幕高清字幕免费mv | 日韩欧美视频在线观看免费 | 亚洲国产中文字幕 | 国产精品一区二区果冻传媒 | 视频国产在线 | 精品久久免费看 | 成人av电影免费 | 精品一区电影国产 | 久久99精品波多结衣一区 | 亚洲黄色一级大片 | 伊人伊成久久人综合网站 | 久久免费在线观看 | 欧美精品久久久久性色 | 丁香五月亚洲综合在线 | 五月婷婷,六月丁香 | 日韩欧美精品在线观看视频 | 日韩城人在线 | 免费日韩一区二区三区 | 精品国产激情 | 日本久久久久久久久久久 | 日韩欧美有码在线 | 91麻豆视频 | 新版资源中文在线观看 | 在线观看免费日韩 | 人人爽人人乐 | 黄色精品在线看 | 国产综合精品久久 | 97在线免费 | 国产精品久久二区 | 国产成人免费观看 | 亚洲精品456在线播放 | 中文字幕日韩一区二区三区不卡 | 久久综合久久综合这里只有精品 | 美女在线免费观看视频 | 亚洲国产欧洲综合997久久, | 麻豆传媒电影在线观看 | 超碰在线观看av.com | 亚洲精品国偷自产在线99热 | 久久久蜜桃一区二区 | 日韩a在线| 国产精品久久久久久久午夜 | 日韩天天综合 | 五月婷婷色丁香 | 国产美女被啪进深处喷白浆视频 | 一区二区三区精品久久久 | 免费黄色av | 少妇视频一区 | 久草在线资源观看 | www.午夜视频 | 最新中文字幕 | 99国产成+人+综合+亚洲 欧美 | 在线精品亚洲一区二区 | 久久av在线 | 天天干天天草 | 在线视频国产区 | 国产黄色免费观看 | av综合av | 91一区啪爱嗯打偷拍欧美 | 中文字幕在线视频一区二区 | 国产精品入口传媒 | 日韩一级网站 | 国产剧情一区二区在线观看 | 九九热99视频 | 国产色女人 | 国产精品系列在线播放 | 亚洲人在线视频 | 日韩欧美视频免费观看 | 国产精品久久久亚洲 | 亚洲精品综合欧美二区变态 | 中文一区在线 | 一级性视频 | 操久久免费视频 | 久草免费手机视频 | 色婷婷影视 | 久久精品国产99 | 欧美极品少妇xxxx | 手机成人av在线 | 91av在线不卡| 国产亚州av | 亚洲高清在线视频 | 久久久久久国产一区二区三区 | 婷婷亚洲综合 | 97**国产露脸精品国产 | 亚洲aaa毛片 | 操久久网 | 成人黄色小说视频 | 九月婷婷人人澡人人添人人爽 | avhd高清在线谜片 | 日韩亚洲精品电影 | 久久五月婷婷丁香 | 中文字幕在线观看播放 | 国产精品一区二区久久久久 | 日韩成人精品在线观看 | 99视频精品免费视频 | 99中文字幕视频 | 中文字幕久久久精品 | 国产999精品视频 |