資料庫基礎
客戶表格(客戶編號, 姓名)的主鍵是客戶編號,訂單表格(訂單編號, 客戶編號)的客戶編號被定義為參照客戶表格客戶編號的外鍵。客戶表格中只有客戶編號為'C1'與'C2'的資料列。在此狀態下執行 INSERT INTO 訂單 VALUES ('O9', 'C5') 的結果,下列何者正確?
- A違反參考完整性限制,資料列不會新增並產生錯誤
- B資料列會新增,客戶表格中也會自動新增客戶編號為'C5'的資料列
- C資料列會新增,但客戶編號的值會被換成NULL
查看答案與解析
正確答案:A. 違反參考完整性限制,資料列不會新增並產生錯誤
外鍵是參照其他表格(此處為客戶表格)主鍵等的欄位,會強制遵守參考完整性限制:只能存入參照對象中存在的值或NULL。客戶表格中沒有'C5'這位客戶,因此新增不存在客戶之訂單的操作會被DBMS拒絕並產生錯誤。這樣可以防止留下不知屬於哪位客戶的訂單。反過來,若要從客戶表格刪除仍有訂單的客戶資料列,在預設行為(NO ACTION)下也會被拒絕。在外鍵定義中加上 ON DELETE CASCADE,就能在刪除客戶時連帶刪除該客戶的訂單。
- A. 正確。參照不存在之客戶編號的資料列會被參考完整性限制拒絕。
- B. DBMS不會自動建立被參照的資料列。
- C. DBMS不會擅自把外鍵的值換成NULL,操作會產生錯誤。