我有两张表代表兴趣和产品的表格。我正在实施他们之间的许多关系。当我创建表时,我忽略了创建表约束,以确保在删除产品或兴趣记录时删除分配表的记录。
兴趣表
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;
删除产品记录时,不会删除相应的分配记录。
有关此问题的一些问题:
答案 0 :(得分:1)
添加外键不会在MyISAM表上发出警告/错误,但不支持。
在创建外键之前,您需要将MyISAM更改为InnoDB,它将完美地运行。
来自官方MySQL手册:
在稍后阶段,将实施外键约束 MyISAM表也是
http://dev.mysql.com/doc/refman/5.7/en/ansi-diff-foreign-keys.html