mysql - 为什么我可以删除但不能截断?
问题描述
所以我在一个表中有一堆测试行:
+----+--------+---------+-----------+----------+---------------------+--------------+
| 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
, CONSTRAINTFK_140AB62012469DE2
FOREIGN KEY (category_id
) REFERENCESdb
.category
(id
))中引用的表
我想作为一个笑话来绕过它试试这个:
> delete from category where id != 0;
令我惊讶的是,这个命令奏效了。现在我根据需要有一个空表,但不确定为什么delete from
超过外键检查但没有truncate
?这背后有什么逻辑/原因吗?
解决方案
一个delete
命令将考虑级联删除(如果它打开),如果不是,则失败。
Truncate
只会作用于表而不是链接的记录。Truncate
基本上试图删除表的所有数据页和索引而不考虑其他表 - 外键约束阻止了这一点。
截断drop table
之后是创建相同模式的表。
推荐阅读
- upgrade - 如何在 Debian 中升级 javac
- python - 从 python3.7 在 bigquery 中插入时间戳值时出错
- r - 是否有任何 R 函数可以从物种分类 ID/物种名称或属名称中提取所有分类名称(门、类、目、科……)?
- reactjs - 使用 AWS AppSync 和 Amplify 从 GraphQL 查询中获取自定义响应
- mongodb - 为什么在没有 API 的情况下连接 MongoDB 不好?
- c# - 如何将用户 ID 和密码附加到 HTML 电子邮件模板。动态归档
- java - 如何将setter方法传递给Java中的方法的参数?
- python - SQLAlchemy 通过混合属性按外部列排序
- swiftui - SwiftUI Combine 为什么 init 不能绑定数据?
- python - 在 Visual Studio Code 上运行新的 Jupyter 笔记本时出现“ENOTDIR 无效 cwd”