MySQL で外部キー制約を持つテーブルを切り詰める方法は?

Susan Sarandon
リリース: 2024-11-18 07:10:02
オリジナル
431 人が閲覧しました

How to Truncate Tables with Foreign Key Constraints in MySQL?

外部キー制約のあるテーブルの切り捨て

外部キー制約のあるテーブルの切り捨ては困難な場合があります。 mygroup テーブルを切り詰めようとしたところ、次のエラーが発生したと想像してください:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (mytest.instance, CONSTRAINT instance_ibfk_1 FOREIGN KEY (GroupID) REFERENCES mytest.mygroup (ID))
ログイン後にコピー

データベース スキーマ:

CREATE TABLE mygroup (
   ID    INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB;

CREATE TABLE instance (
   ID           INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   GroupID      INT NOT NULL,
   DateTime     DATETIME DEFAULT NULL,

   FOREIGN KEY  (GroupID) REFERENCES mygroup(ID) ON DELETE CASCADE,
   UNIQUE(GroupID)
) ENGINE=InnoDB;
ログイン後にコピー

外部キー チェックの無効化:

テーブルを切り詰める従来の方法外部キー制約を一時的に無効にするには:

SET FOREIGN_KEY_CHECKS = 0;

TRUNCATE mygroup;
TRUNCATE instance;

SET FOREIGN_KEY_CHECKS = 1;
ログイン後にコピー

注意: 外部キーのチェックを無効にすると、制約に違反するデータをテーブルに挿入できます。これにより、データの整合性の問題が発生する可能性があります。

代替案を検討してください:

可能であれば、TRUNCATE の代わりに DELETE ステートメントの使用を検討してください:

DELETE FROM mygroup;
DELETE FROM instance;
ログイン後にコピー

DELETE は、外部キー制約を尊重しながら、テーブルからすべてのレコードを削除します。ただし、TRUNCATE よりも実行に時間がかかります。

以上がMySQL で外部キー制約を持つテーブルを切り詰める方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート