所以我在一个表中有一堆测试行:
+----+--------+---------+-----------+----------+---------------------+--------------+
| 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 |
+----+--------+---------+-----------+----------+---------------------+--------------+
我最终让我的代码按我想要的方式工作,所以我试着 TRUNCATE
从新数据开始的表格使用: mysql> truncate category
返回以下错误:
错误1701(42000):无法截断外键约束中引用的表( db
. page
,约束 FK_140AB62012469DE2
外键( category_id
)参考文献 db
. category
( id
))
我想作为一个笑话来绕过它试试这个: > delete from category where id != 0;
令我惊讶的是,命令起了作用。现在我想要一张空table,但不知道为什么 delete from
超过外键检查,但不是 truncate
? 这背后有什么逻辑/原因吗?
1条答案
按热度按时间hzbexzde1#
一
delete
命令将考虑级联删除(如果启用),否则将失败。Truncate
只作用于表而不作用于链接的记录。Truncate
实际上,它试图删除表的所有数据页和索引,而不考虑其他表—外键约束阻止了这一点。截断是有效的
drop table
然后创建相同模式的表。