我有两张表代表利益和产品。我正在实现它们之间的many_many关系。在创建表时,我忽略了创建表约束,以确保如果删除产品或兴趣记录,则会删除赋值表的记录。
利益表
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;当我删除产品记录时,相应的分配记录不会被删除。
关于这方面的一些问题:
发布于 2013-07-07 07:47:35
添加外键不会在MyISAM表上发出警告/错误,但不支持它。
在创建外键之前,您需要将MyISAM更改为InnoDB,它将非常好地工作。
来自官方MySQL手册:
在稍后阶段,还将为MyISAM表实现外键约束。
http://dev.mysql.com/doc/refman/5.7/en/ansi-diff-foreign-keys.html
https://stackoverflow.com/questions/17510136
复制相似问题