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つずつ実行されるので、一度にすべて実行するとエラーが発生するのはなぜですか?