我認(rèn)為外鍵意味著單行必須引用單行,但是我正在查看某些表,但事實并非如此。表1在表2的列2上有一個具有外鍵約束的列1,但是在表2中有很多記錄在列2中具有相同的值。在column2上也有非唯一索引。這是什么意思?外鍵約束是否僅表示至少一條記錄必須存在,且在正確的列中具有正確的值?我認(rèn)為這意味著必須有一個這樣的記錄(不確定空值是否適合圖片,但目前我對此不太擔(dān)心)。更新:顯然,此行為特定于MySQL,這是我所使用的,但我沒有在最初的問題中提及它。
3 回答

海綿寶寶撒
TA貢獻(xiàn)1809條經(jīng)驗 獲得超8個贊
從MySQL文檔:
InnoDB允許外鍵約束引用非唯一鍵。這是對標(biāo)準(zhǔn)SQL的InnoDB擴展。
但是,出于實際原因,要避免在引用表的非唯一列上使用外鍵。也就是說,在這種情況下“ ON DELETE CASCADE”的語義應(yīng)該是什么?
該文檔進(jìn)一步建議:
對非唯一鍵或包含NULL值的鍵的外鍵引用的處理沒有很好的定義(...)。建議您使用僅引用UNIQUE(包括PRIMARY)和NOT NULL鍵的外鍵。

神不在的星期二
TA貢獻(xiàn)1963條經(jīng)驗 獲得超6個贊
您的分析是正確的;鍵不必是唯一的,約束將作用于匹配行的集合。通常這不是有用的行為,但是可能會出現(xiàn)您想要的情況。
添加回答
舉報
0/150
提交
取消