簡體   English   中英

如何在不刪除表的情況下更改外鍵引用 DELETE CASCADE

[英]How to alter Foreign Key reference ON DELETE CASCADE without dropping table

我創建了帶有外鍵引用的數據庫表ON UPDATE CASCADE ON DELETE RESTRICT 但是,我設置了我的引擎 MyISAM,所以這個引用不起作用。 即使主鍵在其他地方用作外鍵,也會被刪除。 我該如何解決這個問題? 我試圖將表引擎更改為 InnoDB,但即使將其設置為 InnoDB,外部引用也不起作用。 此外,我試圖刪除一個帶有外鍵引用和引擎 MyISAM 的空表。 然后我嘗試添加該表,但它沒有添加。 很可能當我刪除表時,外部引用仍保留在模式中的某處。

我的查詢創建表。

CREATE TABLE IF NOT EXISTS `products` (
    `productid` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `productname` varchar(255) NOT NULL,
    `productcode` varchar(255) NOT NULL,
    `producttype` varchar(255) NULL
) 
ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `sales` (
    `salesid` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY
    `productid` int(10) NOT NULL,
    `quantity` int(10) NOT NULL,
    `price` int(10) NOT NULL,
    `date` datetime NOT NULL,
    CONSTRAINT `fk_sales_productid` 
    FOREIGN KEY (productid) 
    REFERENCES products(productid) ON UPDATE CASCADE ON DELETE RESTRICT
) 
ENGINE=MyISAM DEFAULT CHARSET=utf8;

這 2 個表是使用此查詢作為 MyISAM 創建的。 他們有我需要的數據。 我運行此查詢以將引擎更改為 InnoDB,因為刪除級聯的參考在 MyISAM 中不起作用。 'ALTER TABLE products ENGINE=InnoDB;' 'ALTER TABLE sales ENGINE=InnoDB;' 但是制作InnoDB后,刪除產品時引用仍然不起作用,銷售表中的相關產品ID變為NULL。

根據 P.Salmon 的演示查詢似乎有效。 您可能在 FK 參考資料中遺漏了一些東西。 我建議您導出 2 個表,在編輯器中檢查它,尤其是 FK 引用部分並確保引擎是 InnoDB,因為它具有行級鎖定並且具有涉及支持外鍵和關系約束的所謂的參照完整性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM