Mysql 为什么我可以删除但不能截断?

Mysql 为什么我可以删除但不能截断?,mysql,foreign-keys,Mysql,Foreign Keys,所以我在一个表中有一堆测试行: +----+--------+---------+-----------+----------+---------------------+--------------+ | id | name | guru_id | parent_id | approved | created_ts | last_edit_ts | +----+--------+---------+-----------+----------+--------------

所以我在一个表中有一堆测试行:

+----+--------+---------+-----------+----------+---------------------+--------------+
| id | name   | guru_id | parent_id | approved | created_ts          | last_edit_ts |
+----+--------+---------+-----------+----------+---------------------+--------------+
|  1 | PHP    |       1 |      NULL |        0 | 2018-07-12 14:27:05 | NULL         |
|  2 | HTML   |       1 |      NULL |        0 | 2018-07-12 14:33:21 | NULL         |
|  3 | CSS    |       1 |      NULL |        0 | 2018-07-12 14:34:54 | NULL         |
|  4 | test   |       1 |      NULL |        0 | 2018-07-12 14:37:11 | NULL         |
|  5 | test   |       1 |      NULL |        0 | 2018-07-12 14:38:39 | NULL         |
|  6 | test   |       1 |      NULL |        0 | 2018-07-12 14:40:39 | NULL         |
|  7 | test   |       1 |      NULL |        0 | 2018-07-12 14:43:29 | NULL         |
|  8 | test   |       1 |      NULL |        0 | 2018-07-12 14:43:59 | NULL         |
|  9 | test   |       1 |      NULL |        0 | 2018-07-12 14:45:12 | NULL         |
| 10 | test   |       1 |      NULL |        0 | 2018-07-12 14:45:19 | NULL         |
| 11 | test   |       1 |      NULL |        0 | 2018-07-12 14:45:39 | NULL         |
| 12 | CSS    |       1 |      NULL |        0 | 2018-07-12 14:46:30 | NULL         |
| 13 | trey   |       1 |      NULL |        0 | 2018-07-12 14:48:47 | NULL         |
| 14 | trey   |       1 |      NULL |        0 | 2018-07-12 14:49:36 | NULL         |
| 15 | trey   |       1 |      NULL |        0 | 2018-07-12 14:50:52 | NULL         |
| 16 | ajax   |       1 |      NULL |        0 | 2018-07-12 14:51:23 | NULL         |
| 17 | jquery |       1 |      NULL |        0 | 2018-07-12 14:51:44 | NULL         |
+----+--------+---------+-----------+----------+---------------------+--------------+
我最终让我的代码按我所希望的方式工作,因此我尝试截断表,以使用以下命令从新数据开始:

mysql>截断类别

将返回此错误:

错误1701 42000:无法截断外键约束db.page中引用的表,约束FK_140AB6201469DE2外键类别_id引用db.category id

我以为这是一个玩笑,想绕开它试试这个:

>从id!=0;


令我惊讶的是,命令起了作用。现在我有了一个空表,但不确定为什么deletefrom超过了外键检查,而不是truncate?这背后有什么逻辑/原因吗?

如果一个delete命令打开,它将考虑级联删除,如果不打开,它将失败

Truncate只作用于表,而不作用于链接的记录。Truncate实际上是尝试删除表的所有数据页和索引,而不考虑其他表—外键约束阻止了这一点


Truncate实际上是删除表,然后创建相同架构的表。

如果启用,delete命令将考虑级联删除。Truncate将只作用于表而不作用于链接记录。此表是否包含外键,或者此表中的值是否是另一个表的外键?听起来像是后一种情况,在这种情况下,我希望删除会起作用,但截断会失败…@DragonThinks哦,我明白了,所以截断只是试图用暴力清除,而删除会完成整个级联过程?@DragonThinks啊,我明白了,如果你想添加答案,请随意,我可以标记为接受:谢谢。我真的没有想到它会大到足以成为一个答案: