无法截断外键约束中引用的表

时间:2015-11-18 19:30:48

标签: mysql sql

无法截断外键约束中引用的表。 我应该先做什么来启用trancate?

ditails: (guacamoleguacamole_connection_history,约束guacamole_connection_history_ibfk_2外键(connection_id)参考guacamoleguacamole_connectionconnection_id))

我想清除guacamole_connection表以进行开发测试。

DB structure

4 个答案:

答案 0 :(得分:11)

您可以跳过外键检查来截断。

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table1; 
SET FOREIGN_KEY_CHECKS = 1;

答案 1 :(得分:3)

TRUNCATE它不等同于DELETE:TRUNCATE它是DDL操作,而DELETE是DML操作。换句话说,TRUNCATE改变表结构(即释放存储并根据您正在处理的RDBMS修改其他属性),而DELETE只是在执行模型指定的每个验证时修改数据(即出现关键约束,检查约束等) 。)

为什么要截断表格?好吧,它更快,因为它不必运行任何验证(这就是你的FK影响截断操作的原因),并允许你释放表(及它的索引)当前正在分配的所有空间。

所以,如果你想截断你的表,你应该:

  1. DISABLE相关FK
  2. TRUNCATE所有相关表格。
  3. 启用以前禁用的FK
  4. 在内部,操作使用(再次取决于RDBMS)等效于DROP并创建FK。差异通常与所需的权限有关,因为概念上创建/删除FK与启用/禁用它不同

答案 2 :(得分:2)

为什么不添加添加tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value Variable_21/Adam [[Node: Adam_2/update_Variable_21/ApplyAdam = ApplyAdam[T=DT_FLOAT, use_locking=false, _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_21, Variable_21/Adam, Variable_21/Adam_1, beta1_power_2, beta2_power_2, Adam_2/learning_rate, Adam_2/beta1, Adam_2/beta2, Adam_2/epsilon, gradients_11/add_10_grad/tuple/control_dependency_1)]] 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;

答案 3 :(得分:0)

请务必先从任何相关表中删除条目。例如:

 TRUNCATE TABLE guacamole_connection_history;
 TRUNCATE TABLE guacamole_connection;