0

クエリがありますが、エラー #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 ) 
4

1 に答える 1

2

MySQLマニュアルから:

SET foreign_key_checks = 0 を実行しない限り、FOREIGN KEY 制約によって参照される InnoDB テーブルに対して DROP TABLE を発行することはできません。テーブルを削除すると、その create ステートメントで定義された制約も削除されます。

削除されたテーブルを再作成する場合は、それを参照する外部キー制約に準拠する定義が必要です。前述のように、正しい列名と型が必要であり、参照されるキーにインデックスが必要です。これらが満たされていない場合、MySQL はエラー番号 1005 を返し、エラー メッセージでエラー 150 を参照します。

これは、他のテーブルの 1 つが、iars再作成していない列を参照している可能性があることを意味します。解決策は、(クエリを介してdescribe) すべてのテーブルを整理し、参照がどこにあるかを確認し、参照された列をここで CREATE TABLE に追加するか、スキーマに応じて参照を削除することです。

その参照ページの後半から非常に役立つ宝石を編集します。

SHOW ENGINE INNODB STATUS;

発生したばかりの外部キー エラーに関する多くの有益な情報が明らかになります。必要な場所を正確に示す必要があります。

于 2012-07-22T15:01:17.963 に答える