1. ホーム
  2. mysql

[解決済み] 外部キー制約のあるテーブルを切り捨てるには?

2022-03-23 06:37:22

質問

なぜ TRUNCATE オン mygroup の仕事は? にもかかわらず ON DELETE CASCADE SET 得ることができます。

エラー 1701 (42000)。外部キー制約で参照されているテーブルを切り捨てることができません ( mytest . instance コンストレイント instance_ibfk_1 FOREIGN KEY ( GroupID ) REFERENCES mytest . mygroup ( ID ))

drop database mytest;
create database mytest;
use mytest;

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;

解決方法は?

できないこと TRUNCATE FK制約が適用されているテーブル ( TRUNCATE とは異なります。 DELETE ).

これを回避するには、これらのソリューションのいずれかを使用します。どちらもデータの整合性が損なわれる危険性があります。

オプション1:

  1. 制約を取り除く
  2. 実行する TRUNCATE
  3. への参照を持つ行を手動で削除します。 どこにも
  4. 制約の作成

オプション 2: が提案する ユーザー447951 回答

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table $table_name; 
SET FOREIGN_KEY_CHECKS = 1;