2
如果我在InnoDB引擎上设计数据库,并且我有3个表,我无法删除,因为每个表示“外键约束失败” - 是否意味着设计错误?圆形外键约束失败mysql
请参阅下面的结构:
CREATE TABLE IF NOT EXISTS `account` (
`account_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `identity` (
`identity_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned DEFAULT NULL,
`account_id` smallint(5) unsigned DEFAULT NULL,
PRIMARY KEY (`identity_id`),
KEY `fk_details1` (`user_id`),
KEY `fk_account1` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `user` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`login` varchar(64) NOT NULL DEFAULT '',
`password` varchar(32) NOT NULL DEFAULT '',
`default_identity_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `login_UNIQUE` (`login`),
KEY `fk_identity1` (`default_identity_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
-- Constraints for table `identity`
--
ALTER TABLE `identity`
ADD CONSTRAINT `fk_details1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `fk_account1` FOREIGN KEY (`account_id`) REFERENCES `account` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table `user`
--
ALTER TABLE `user`
ADD CONSTRAINT `fk_identity1` FOREIGN KEY (`default_identity_id`) REFERENCES `identity` (`identity_id`) ON DELETE CASCADE ON UPDATE CASCADE;
我怀疑问题是default_identity_id ...我将它作为一个标志,标识表?
请指教!
循环引用很难处理。您可以将'default_identity_id'作为标志移动到'identity table',或者您可以添加另一个'default_identity'表。看到类似的问题:[MySQL数据库设计。插入1to1表中的行](http://stackoverflow.com/questions/6691366/mysql-database-design-inserting-rows-in-1to1-tables/6692054#6692054)(阅读那些Parent-Child-BestChild作为User- Identity-DefaultIdentity) – 2012-04-09 10:57:15
非常好。而已。请让它成为答案,以便我可以接受它:)。 – RandomWhiteTrash 2012-04-09 11:00:46
我的MySQL 5.5.15.0似乎是'删除循环相关的数据就好了。您能否发布重现问题的测试数据? – 2012-04-10 06:32:43