2011-06-29 24 views
1

ALTER TABLEステートメントを同じトランザクション内で実行すると、MySQL 5.1.41の問題が発生します。そこ別の開発者と同じコードを実行し、同じテーブル作業罰金に5.1.491つのトランザクションで複数のALTER TABLEステートメントが発行される

複数ADD FOREIGN KEY書類にこれらの問題のどれも持っていないです:

ALTER TABLE school_state ADD FOREIGN KEY (school_id) REFERENCES school(id) ON DELETE CASCADE; 
ALTER TABLE school_state ADD FOREIGN KEY (state_id) REFERENCES state(id) ON DELETE CASCADE; 

は、しかし、異なるテーブル間、私は不可解なを取得しますエラー:

ALTER TABLE school_state ADD FOREIGN KEY (school_id) REFERENCES school(id) ON DELETE CASCADE; 
ALTER TABLE school_state ADD FOREIGN KEY (state_id) REFERENCES state(id) ON DELETE CASCADE; 
ALTER TABLE publisher_login ADD FOREIGN KEY (publisher_id) REFERENCES publisher(id); 

Can't create table 'my_database.#sql-2cd_45' (errno: 150) 

ストレンジャーまだ、複数のDROP FOREIGN KEY文が同じであっても、テーブル全体に失敗:

ALTER TABLE school_state DROP FOREIGN KEY school_state_ibfk_2; 
ALTER TABLE school_state DROP FOREIGN KEY school_state_ibfk_1; 

Error on rename of './my_database/school_state' to './my_database/#sql2-2cd-45' (errno: 152) 

実際にを実行する必要がありますか?独自のトランザクションとして単一のステートメントを実行しますか?その種のものは原子的な取引をする目的を破るからです。

UPDATE:以下パーアイクの提案、私は上記のADD FOREIGN KEYクエリ後SHOW ENGINE INNODB STATUSを実行して、次のことを得ている:として

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
110630 8:01:12 Error in foreign key constraint of table my_database/#sql-2cd_95: 
FOREIGN KEY (publisher_id) REFERENCES publisher(id): 
Cannot resolve column name close to: 
) REFERENCES publisher(id) 

正直なところ、私はまだ、問題が何であるかを理解していません参照するキー(publisher.id)が存在し、外部キー(publisher_login.publisher_id)となるフィールドも非常に存在します。これらのステートメントは一度に1つずつ実行されるので、一度にすべて実行するとエラーが発生するのはなぜですか?

答えて

3

DDLをロールバックすることはできません。そのため、DDLをトランザクション内で実行しないでください。詳しくはmanualをご覧ください。

エラーが発生している場合は、SHOW ENGINE INNODB STATUS\Gを実行して、LATEST FOREIGN KEY ERRORのセクションを参照して、エラーの原因を調べる必要があります。

関連する問題