Mysql查询错误#1005 150

时间:2012-07-22 14:57:01

标签: mysql sql mysql-error-1005

我有一个查询,但详细显示错误#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 ) 

1 个答案:

答案 0 :(得分:2)

来自the MySQL manual

  

您不能为FOREIGN KEY约束引用的InnoDB表发出DROP TABLE,除非您执行SET foreign_key_checks = 0.删除表时,也会删除在其create语句中定义的约束。

     

如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义。它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述。如果不满足,则MySQL返回错误号1005并在错误消息中引用错误150.

这意味着您的其他一个表可能引用了iars中您不重新创建的列。然后,解决方案是清除所有表(通过describe查询)并查看引用的位置,并将引用的列添加到此处的CREATE TABLE中,或者删除引用,以适合您的模式

编辑以后在该引用页面上提供非常有用的宝石:

SHOW ENGINE INNODB STATUS;

显示加载有关刚刚发生的外键错误的良好信息。它应该指出你需要看的确切位置。