排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
MySQL的SQL语句 - 数据定义语句(19)- TRUNCATE TABLE 语句
MySQL的SQL语句 - 数据定义语句(19)- TRUNCATE TABLE 语句
数据库杂货铺
2021-04-12
288
TRUNCATE TABLE 语句
TRUNCATE
[
TABLE
] tbl_name
复制
TRUNCATE TABLE 语句完全清空表。它需要
DROP
权限。从逻辑上讲,
TRUNCATE TABLE
类似于删除所有行的
DELETE
语句,或者是
DROP TABLE
和
CREATE TABLE
语句的组合。
为了实现高性能,TRUNCATE TABLE 绕过了删除数据的
DML
方法。因此,它不会触发
ON DELETE
触发器,不能对具有父
-
子外键关系的
InnoDB
表执行此命令,也不能像
DML
操作那样回滚。但是,如果服务器在操作期间停止,使用支持原子
DDL
的存储引擎的表上的
TRUNCATE TABLE
操作将被完全提交或回滚。
虽然 TRUNCATE TABLE 与
DELETE
类似,但它被归为
DDL
语句,而不是
DML
语句。与
DELETE
有以下几个不同之处
:
●
截断操作删除并重新创建表,这比逐行删除要快得多,特别是对于大型表。
●
截断操作会导致隐式提交,因此无法回滚。
●
如果会话有生效的表锁定,则无法执行截断操作。
●
对于
InnoDB
或
NDB
表,如果有其他表引用该表的
FOREIGN KEY
约束,
TRUNCATE TABLE
命令就会失败。允许在同一表的列之间进行外键约束。
●
截断操作不会返回删除的行数。通常的结果是
“
0
行受影响”,这应该解释为“没有信息”。
●
只要表定义有效,即使数据或索引文件已损坏,也可以使用
TRUNCATE TABLE
语句将表重新创建为空表。
●
任何
AUTO_INCREMENT
值将被重置为它的初始值。即使对于通常不重用序列值的
MyISAM
和
InnoDB
也是如此。
●
当与分区表一起使用时,
TRUNCATE TABLE
语句保留分区
;
也就是说,数据和索引文件被删除并重新创建,而分区定义不受影响。
● TRUNCATE TABLE
语句不会引发
ON DELETE
触发器。
●
支持截断损坏的
InnoDB
表。
对一个表执行 TRUNCATE TABLE 语句,将关闭通过
HANDLER OPEN
对该表打开的所有句柄。
从二进制日志记录和复制的角度看,TRUNCATE TABLE 类似于
DROP TABLE
后面紧跟
CREATE TABLE
语句,即
DDL
而不是
DML
。这是因为,当使用
InnoDB
和其他事务存储引擎时,如果事务隔离级别不允许基于语句的日志记录(
READ COMMITTED
或
READ UNCOMMITTED
),则在使用
STATEMENT
或
MIXED
日志模式时,不会记录和复制语句。但是,它仍然以前面描述的方式应用于使用
InnoDB
的副本。
在 MySQL5.7 及更早版本中,在一个具有巨大缓冲池和启用
innodb_adaptive_hash_index
的系统上,由于删除表的自适应哈希索引项时发生
LRU
扫描,
TRUNCATE TABLE
操作可能会导致系统性能暂时下降。
MySQL 8.0
中
TRUNCATE TABLE
到
DROP TABLE
和
CREATE TABLE
的重新映射避免了
LRU
扫描的问题。
TRUNCATE TABLE 可用于性能架构摘要表,但其效果是将摘要列重置为
0
或
NULL
,而不是删除行。
截断独立表空间中的 InnoDB 表,将删除现有表空间并创建一个新表空间。从
MySQL 8.0.21
开始,如果表空间是用早期版本创建的,并且位于一个未知的目录中,
InnoDB
会在默认的位置创建新的表空间,并在错误日志中写入如下警告
:The DATA DIRECTORY location must be in a known directory. The DATA DIRECTORY location will be ignored and the file will be put into the default datadir location.
已知的目录是由
datadir
、
innodb_data_home_dir
和
innodb_directory
变量定义的目录。要让
TRUNCATE TABLE
在当前位置创建表空间,请在运行
TRUNCATE TABLE
之前将目录添加到
innodb_directory
设置中。
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/truncate-table.html
mysql
文章转载自
数据库杂货铺
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨