0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【MySQL】外部キー制約を持っているテーブルのデータを削除する時は...

Last updated at Posted at 2021-04-16

結論:SET FOREIGN_KEY_CHECKS = 0を使って制約を一時的に解除する

こんにちは!スージーです

mysqlで外部キー制約を持つテーブルのデータを削除する必要がある時に毎回調べている気がしたので備忘録として書き留めておきます

参考

railsガイド
[MySQL 5.6 リファレンスマニュアル](MySQL 5.6 リファレンスマニュアル)

モデルの関連付け

railsを使っているのでrailsで説明します

# item
# 商品を管理するモデル
create_table "items", charset: "utf8mb4", force: :cascade do |t|
    t.string "item_name"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
end

# item_detail
# 商品の詳細を管理するモデル
create_table "item_details", charset: "utf8mb4", force: :cascade do |t|
    t.bigint "item_id" <=  これが外部キー
    t.integer "item_price"
    t.string "description"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
end

# item_detail
class CreateItemDetails < ActiveRecord::Migration[6.1]
  def change
    create_table :item_details do |t|
      t.references :item, foreign_key: { to_table: :items } <= これが外部キー制約
      t.integer "item_price"
      t.string "description"

      t.timestamps
    end
  end
end

itemテーブルのデータを削除する

開発中に色々データを加工したり、削除したりする事があると思いますが、一回テーブルのデータをtruncateしようかなーと思ったら怒られた

mysql > truncate table items;
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`test_item_development`.`item_details`, CONSTRAINT `fk_rails_30c7a965d1` FOREIGN KEY (`item_id`) REFERENCES `test_item_development`.`items` (`id`))

こんな時、開発環境であれば何も考えず以下を実行してtruncateさせちゃいます

mysql > set foreign_key_checks = 0;
mysql > truncate table items;
=> query ok・・・・
mysql > set foreign_key_checks = 1;

set foreign_key_checks = 1;で元に戻しましょう

おわり

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?