2

私のクライアントは最近、自分のマシンをフォーマットし、MySQLサーバーと私のアプリケーションを再インストールしました。彼は、マスターテーブルからレコードを削除しても子テーブルには影響しないと不満を漏らしました。私は彼にデータベースのバックアップを送るように頼んだ。データベースを復元したところ、テーブルエンジンがMyISAMに変更されたのに対し、InnoDBに設定されていたことがわかりました。

プライマリテーブルに存在しないレコードを子テーブルから削除しました。この後、外部キーインデックスを再設定していないと、「外部キー制約に失敗しました。エラー1005」というエラーが表示され、場合によっては150というエラーが表示されます。

プライマリテーブルまたは子テーブルのいずれかに残っている可能性のある行を再確認しましたが、何も機能していないようです。

主テーブルには、主キーを組み合わせて形成する2つの列があります。列は次のとおりです。BillNo、BillDate。

手伝ってください。

4

2 に答える 2

4

これは広く知られているMySQLの落とし穴です。私はこの問題に何度か遭遇しました。彼らはおそらくInnoDBに問題があり、バックアップからデータベースを復元しました。InnoDBが機能していなかったため、整合性制約(外部キーなど)をサポートしていないMyISAMストレージエンジンにフォールバックしました。

基本的に問題は、何らかの理由(通常は構成の問題)でInnoDBエンジンが起動しない場合、MySQLがサイレントにMyISAMエンジンにフォールバックすることです。あなたの声明が言ったとしても:

CREATE TABLE () ENGINE=InnoDB

次に、InnoDBがアクティブでない場合、MySQLは警告なしでMyISAMテーブルを作成します。さようならデータの整合性!:)

実行SHOW ENGINESして、アクティブなエンジンを確認できます。詳細については、このMySQLバグレポートを参照してください。

于 2009-11-19T10:49:08.477 に答える
1
  1. 両方のテーブルにInnoDBエンジンを使用していることを確認してください。

  2. 両方のフィールドが同じタイプであり、インデックスが付けられていることを確認してください。

From http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html:

If you re-create a table that was dropped, it must have a definition that conforms to the foreign key constraints referencing it. It must have the right column names and types, and it must have indexes on the referenced keys, as stated earlier. If these are not satisfied, MySQL returns error number 1005 and refers to error 150 in the error message.

于 2009-11-19T10:51:35.557 に答える