![](/img/trans.png)
[英]Cannot truncate a table referenced in a foreign key constraint from empty table
[英]Cannot truncate a table referenced in a foreign key constraint
您可以通過跳過外鍵檢查來進行截斷。
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table1;
SET FOREIGN_KEY_CHECKS = 1;
TRUNCATE 它不等同於 DELETE:TRUNCATE 它是 DDL 操作,而 DELETE 是 DML 操作。 換句話說,TRUNCATE 會改變表結構(即根據您正在處理的 RDBMS 釋放存儲空間並修改其他屬性),而 DELETE 只是在執行模型指定的每個驗證時修改數據(即前鍵約束、檢查約束等) .)
為什么要截斷表格? 嗯,它更快,因為它不必運行任何驗證(這就是為什么您的 FK 會影響截斷操作),並允許您釋放表(及其索引)當前分配的所有空間。
所以,如果你想截斷你的表,你應該:
在內部,操作使用(再次取決於 RDBMS)相當於 DROP 和 CREATE FK。 差異通常與所需的權限有關,因為從概念上講,創建/刪除 FK 與啟用/禁用它不同
為什么不添加一個約束添加ON DELETE CASCADE
和ON UPDATE CASCADE
? 然后你需要做的就是TRUNCATE guacamole_connection CASCADE
例子:
ALTER TABLE
guacamole_connection_history
ADD CONSTRAINT
guacamole_connection_history_cascade_delete
FOREIGN KEY (connection_id)
REFERENCES guacamole_connection (connection_id)
ON UPDATE CASCADE ON DELETE CASCADE;
然后只需運行TRUNCATE guacamole_connection CASCADE
確保首先從任何依賴表中刪除條目。 例如:
TRUNCATE TABLE guacamole_connection_history;
TRUNCATE TABLE guacamole_connection;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.