MYSQL清空表和截断表问题如何解决

数据库   发布日期:2023年08月20日   浏览次数:271

这篇文章主要介绍“MYSQL清空表和截断表问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MYSQL清空表和截断表问题如何解决”文章能帮助大家解决问题。

    MYSQL清空表和截断表

    清空表和截断表

    清空表:delete from users;

    清空表只是清空表中的逻辑数据,但是物理数据不清除,如主键值、索引等不被清除,还是原来的值。

    截断表:truncate table users;

    截断表可以用于删除表中 的所有数据。截断表命令还会回收所有索引的分配页。

    截断表的执行速度与不带where子句的delete(删除)命令相同,甚至比它还要快。

    delete(删除)一次删除一行数据,并且将每一行被删除的数据都作为一个事务记录日志;而truncate (截断)表则回收整个数据页,只记录很少的日志项。delete(删除)和truncate(截断)都会回收被数据占用的空间,以及相关的索引。只有表的 拥有者可以截断表。

    另外,truncate表之后,如果有自动主键的话,会恢复成默认值。

    MYSQL清空表数据的注意事项

    清空表数据 可用的两种操作:

    delete from 表名;
    
    truncate table 表名;

    两者比较

    不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。

    效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。

    delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。

    我在用delete from 进行删除时发现报错了,说时safe updae 模式什么的,后来查看其他小伙伴的博客,发现了解决办法:

    只需执行 SET SQL_SAFE_UPDATES = 0; 即可。

    以上就是MYSQL清空表和截断表问题如何解决的详细内容,更多关于MYSQL清空表和截断表问题如何解决的资料请关注九品源码其它相关文章!