假設我有一個表名爲供應我要刪除的第一行:如何在刪除表中的第一行後保持一致性。 MySQL的
delete from suppliers where supplierID = 1
是什麼意思,「採取一切必要措施保持一致性」事先查詢後?主鍵(SupplierID)是使用AUTO_INCREMENT創建的。
假設我有一個表名爲供應我要刪除的第一行:如何在刪除表中的第一行後保持一致性。 MySQL的
delete from suppliers where supplierID = 1
是什麼意思,「採取一切必要措施保持一致性」事先查詢後?主鍵(SupplierID)是使用AUTO_INCREMENT創建的。
那麼,如果你使用AUTO_INCREMENT,那麼你不能做你在想什麼,因爲數據庫中的AUTO_INCREMENT鍵用於唯一標識給定的行。找到最低未使用密鑰值的最佳方法是根本不使用AUTO_INCREMENT,然後手動管理密鑰。
另外要提及的是,您可以使用ON DELETE CASCADE自動刪除InnoDB數據庫中的相關記錄,但是在MyISAM中您必須手動刪除它們。
另請檢查此reference。
爲了保持連貫性,您應該在依賴表中使用InnoDB endine和foreign key指向Suppliers.supplierID
。
然後,如果您嘗試刪除任何其他表中引用的記錄,則數據庫將發出錯誤。第一供應商的
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
ID可以發現這樣:只有當你有一個相關的表外鍵
SELECT MIN(supplierID) FROM Suppliers
一致性可被破壞,相關的供應商。 – user4035
通過代碼,是否有辦法處理這種情況?我知道關鍵可能是引用其他軟件,因此,我有一個孤兒記錄 – user2948897
在InnoDB中,您可以使用ON DELETE CASCADE自動刪除從屬記錄。在MyISAM中,您必須手動刪除它們。 – user4035