今天遇到不少DB2 foreign key的referencial constraint的問題,翻了SQL reference才知道,某些情況下,創建delete rule是有限制的。而網上基本上沒有人寫過這些限制,所以寫點總結,填下空白:
1. 如果父表和子表是同一張表,即自己引用自己,則必須指定CASCADE or NO ACTION;SET NULL只能在外鍵中的某些column允許NULL且這些column都不是partitioning index的key時指定。
2. 多個表間Delete的傳播不可以導致任何一個表delete-connect到自己。
3. 如果父表和子表間有多個delete-connection,那麼父表和子表的依賴關係必須相同,且不能爲SET NULL。
另外,關於默認的ON DELETE RULES:依賴於當create table時,一個叫CURRENT RULES的特殊register裏的值,如果裏面的值是'DB2',則默認的delete rule是RESTRICT;如果裏面的值是'SQL',則默認的delete rule是NO ACTION