2013-07-07 49 views
0

我有兩個表代表興趣和產品。我正在實施他們之間的many_many關係。當我創建表格時,我忽略了創建表格約束以確保刪除任何產品或興趣記錄時,分配表格的記錄被刪除。表創建後添加表引用約束MySQL

興趣表

CREATE TABLE IF NOT EXISTS `interests` (
    `id` int(11) NOT NULL auto_increment, 
    `interest` varchar(255) NOT NULL, 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=62 ; 

產品表

CREATE TABLE IF NOT EXISTS `products` (
    `id` int(11) NOT NULL auto_increment, 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=65 ; 

分配表

CREATE TABLE IF NOT EXISTS `interest_product_assignment` (
    `id` int(11) NOT NULL auto_increment, 
    `interest_id` int(11) NOT NULL, 
    `product_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `product` (`product_id`), 
    KEY `interest` (`interest_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

我試圖添加此約束出現失敗 -

ALTER TABLE `interest_product_assignment` ADD CONSTRAINT `product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; 

ALTER TABLE `interest_product_assignment` ADD CONSTRAINT `interest` FOREIGN KEY (`interest_id`) REFERENCES `interest` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; 

當我刪除產品記錄時,相應的賦值記錄不會被刪除。

這方面的一些問題:

  1. 這是正確的語法爲這種約束?
  2. 重要的是,我沒有添加這些約束創建 表或我已經在表中的數據?
  3. 在PHPMyADMIN中,我可以看到我的約束是否已成功添加?我似乎無法找到任何地方的引用,促使我認爲PHPMyADMIN忽略了我的約束,而不會引發錯誤消息。

回答