0

table2からテーブルに外部キーを追加しようとしていますtable1。しかし、私はこのようなエラーが発生しました...問題は何ですか...ヘルプ

Error

SQL query:

ALTER TABLE `table2` ADD FOREIGN KEY ( `bus_id` ) REFERENCES `db1`.`table1` (
`bus_id`
) ON DELETE CASCADE ON UPDATE CASCADE ;

MySQL said: Documentation
#1452 - Cannot add or update a child row: a foreign key constraint fails (`db1`.`#sql-664_e2`, CONSTRAINT `#sql-664_e2_ibfk_1` FOREIGN KEY (`bus_id`) REFERENCES `table1` (`bus_id`) ON DELETE CASCADE ON UPDATE CASCADE) 

table1 の構造

ここに画像の説明を入力

table2 の構造

ここに画像の説明を入力

4

3 に答える 3

1

詳細情報を取得するには、次のコマンドを実行します。

SHOW ENGINE INNODB STATUS;

たとえば、データの不一致があると思います。table2には、table1にはない値が列bus_idに含まれています。

これを試して:

SELECT DISTINCT bus_id FROM table2 WHERE 
    bus_id NOT IN (SELECT bus_id FROM table1)

また、両方のテーブルがストレージエンジンとしてInnoDBを使用していることを確認してください。

于 2012-10-18T06:27:44.177 に答える
1

テーブルにはいくつかのデータがあります。にすべての値が格納されていることを確認しますtable2bus_idは正しい; これらの値はすべて にある必要がありますtable1bus_id.

次のクエリを実行して、 の間違ったbus_id値を表示しますtable2

SELECT t2.bus_id AS inconsistent_bus_id FROM table2 t2
LEFT JOIN table1 t1
  ON t1.bus_id = t2.bus_id
WHERE t1.bus_id IS NULL

このレコードを から削除するtable2か、 に追加bus_idしてtable1ください。その後、再度外部キーの作成を試みます。

于 2012-10-18T06:29:16.000 に答える
1

ALTERあなたのステートメントにエラーは見られません。table2主な理由は、 onでbus_idないレコードがすでに存在している可能性があるためですtable1。したがって、できる最善の解決策は、最初の table2 を空にして、alter ステートメントを再度実行することです。

于 2012-10-18T06:30:49.840 に答える