我有一个查询,但详细显示错误#1005和150。一些innodb
如何做到对不对?
CREATE TABLE `iars` ( `id` int(10) unsigned NOT NULL auto_increment,
`SessionId` int(10) unsigned NOT NULL,
`TeacherId` int(10) unsigned NOT NULL,
`courseid` int(4) unsigned NOT NULL,
`semester` int(4) unsigned NOT NULL,
`PaperId` int(4) unsigned NOT NULL,
`groupid` int(4) unsigned NOT NULL,
`Type` varchar(4) default 1,
PRIMARY KEY (`id`),
UNIQUE KEY `Constrint_Index`
(`SessionId`,`TeacherId`,`courseid`,`semester`,`PaperId`,`groupid`),
KEY `FK_tid` (`TeacherId`),
KEY `FK_gid` (`GroupId`),
KEY `FK_pid` (`PaperId`),
CONSTRAINT `FK_gid` FOREIGN KEY (`GroupId`) REFERENCES `groups` (`id`) ON DELETE
CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_pid` FOREIGN KEY (`PaperId`) REFERENCES `papers` (`p_id`) ON DELETE
CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_ssessionid` FOREIGN KEY (`SessionId`) REFERENCES `sessions` (`id`) ON
DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_tid` FOREIGN KEY (`TeacherId`) REFERENCES `teachers` (`id`) ON DELETE
CASCADE ON UPDATE CASCADE )
答案 0 :(得分:2)
您不能为FOREIGN KEY约束引用的InnoDB表发出DROP TABLE,除非您执行SET foreign_key_checks = 0.删除表时,也会删除在其create语句中定义的约束。
如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义。它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述。如果不满足,则MySQL返回错误号1005并在错误消息中引用错误150.
这意味着您的其他一个表可能引用了iars
中您不重新创建的列。然后,解决方案是清除所有表(通过describe
查询)并查看引用的位置,并将引用的列添加到此处的CREATE TABLE中,或者删除引用,以适合您的模式
编辑以后在该引用页面上提供非常有用的宝石:
SHOW ENGINE INNODB STATUS;
显示加载有关刚刚发生的外键错误的良好信息。它应该指出你需要看的确切位置。