簡體   English   中英

如何在 MySQL 中截斷使用 ManyToMany 字段的表

[英]How truncate a table in MySQL that is using ManyToMany field

我在 MySQL 中有一個表,它有一個 ManyToMany 字段,我想截斷該表,但是當我嘗試它時,出現以下錯誤:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint ...

我正在將 Symfony 與 Doctrine 一起使用,但如果可能的話,我有興趣學習如何通過控制台進行操作

class Project {

  /**
  * @ORM\ManyToMany(targetEntity="Shipping", mappedBy="projects")
  **/
  private $employee;
}

class Employee{

  /**
  * @ORM\ManyToMany(targetEntity="Product", inversedBy="employee")
  * @ORM\JoinTable(name="middle_table")
  **/
  protected $projects;
}

外鍵意味着您有兩個表,並且每次更新都必須與外鍵約束所引用的表兼容。

可能的解決方案在這里: 如何正確截斷表?

SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checking.
TRUNCATE TABLE forums;
TRUNCATE TABLE dates;
TRUNCATE TABLE remarks;
SET FOREIGN_KEY_CHECKS = 1; -- Enable foreign key checking.

現在, middle_table 中的外鍵不允許您從 Projects 表中刪除記錄。 換句話說,您在 middle_table 中有一個指向 Project 的鏈接,它沒有機會從 Project 中刪除行。 因此,您應該更改外鍵的定義以允許刪除,您可以將鏈接設置為空或進行級聯刪除。 我更喜歡第二個選項,因此將注釋更改為跟隨,它應該允許您刪除 Projects 表中的行,它還將刪除到 middle_table 中的 Project 的鏈接。

class Project {

  /**
  * @ORM\ManyToMany(targetEntity="Shipping", mappedBy="projects", cascade={"remove"})
  **/
  private $employee;
}

文檔:
學說關聯映射
mysql 外鍵約束

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM