0

過去数か月の間にいくつかのサーバー間で移動されたデータベースが、データベース ダンプの 1 つで myisam に変換され、すべての外部キー制約が無効になっていることを発見しました (感銘を受けていません)。PHPスクリプトを使用してすべてのテーブルをinnodbに変換しましたが、制約の半分が追加されていないことがわかりました。

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`identicar2`.<result 2 when explaining filename '#sql-2a7_c0'>, CONSTRAINT `#sql-2a7_c0_ibfk_1` FOREIGN KEY (`feature_sk`) REFERENCES `tbl_feature_list` (`feature_sk`))

何千ものレコードを手動で調べることはできません。データベースを元の状態に戻すにはどうすればよいですか?

必要に応じてテーブル構造を提供できますが、どのソリューションも正確な構造に依存しないと思います

4

1 に答える 1

1

最も簡単な解決策:(保持したいデータを失うという明らかな危険性を含む)

UPDATE table
SET fkColumn = NULL
WHERE fkColumn NOT IN (SELECT referenceColumn FROM referencedTable)

それらを見つけたいだけの場合:

SELECT *
FROM table
WHERE fkColumn NOT IN (SELECT referenceColumn FROM referencedTable)
于 2013-02-02T23:03:00.153 に答える