[英]Constraint violation - SQL Server
我有創建兩個表的說明:
CREATE TABLE S
(
c INT PRIMARY KEY,
d INT
);
CREATE TABLE R
(
a INT PRIMARY KEY,
b INT REFERENCES S(c)
);
R(a,b)
有4行: (0,4),(1,5),(2,4),(3,5)
S(c,d)
也有4行: (2,10),(3,11),(4,12),(5,13)
考慮到此信息,我需要選擇由於約束沖突而不會拒絕以下哪些修改(此處不考慮語法):
查詢(a)
INSERT INTO S
VALUES (3, 3)
查詢(b)
INSERT INTO S
VALUES (4, 4)
查詢(c)
DELETE (5, 13) FROM S
查詢(d)
DELETE (4, 12) FROM S
我很難回答這個問題,因為我相信所有選擇都會被拒絕。
我無法將(3, 3)
或(4, 4)
插入S
因為c是主鍵,因此我無法插入將在c中重復的值。
而且我無法從S
刪除(5, 13)
或(4, 12)
,因為如果刪除了這些行,則表R
b列指向c列,則b列將指向不存在的東西,這將導致一個錯誤。
我想念什么嗎?
語句(a)和(b)一定會因為您提到“它們試圖創建重復的主鍵”而失敗。
但是,對於語句(c)和(d),它們可能成功或失敗,具體取決於您的參照完整性配置,如下所示:
參照完整性有4個選項(無操作,級聯,設置為空,設置為默認)
S(5,13)
將刪除R(1,5)
,刪除S(4,12)
將刪除R(0,4)
。 Null
。 在您的情況下,刪除S(5,13)
會將R(1,5)
更新為R(1,Null)
,刪除S(4,12)
會將R(0,4)
更新為R(0,Null)
Null
如果未定義默認值)。 在您的情況下,由於未設置默認值,它將失敗,但是假設您將R(b)
默認值設置為0
,例如刪除S(5,13)
會將R(1,5)
更新為R(1,0)
並刪除S(4,12)
會將R(0,4)
更新為R(0,0)
我猜這是某種形式的考試問題,所以我將重點放在如何得出答案上,而不僅僅是給您答案。
您有兩個要關注的約束。
表S
在列C
上具有主鍵約束。 表R
在列B
上具有外鍵約束。
由於主鍵約束,如果你嘗試,你會收到一條錯誤INSERT
到S
與值C
已經存在。
檢查您的INSERT
語句,以查看是否有任何試圖插入C
的值已經存在。 如果這樣做,他們將失敗。
給定外鍵約束,如果您嘗試從S
刪除表R
上外鍵約束已引用的C
任何值,則會收到錯誤消息。
檢查您的DELETE
語句。 如果R
中已經引用了任何要刪除的值,則這些語句將失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.