MYSQL:如何清空表中的数据(一张表和多张表)

方法1:delete from 表名;

方法2:truncate table 表名;

比  较:
1> truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢)
2> truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因
3> truncate 不激活trigger (触发器),但是会重置Identity (标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的 ID数。而 delete 删除以后,identity 依旧是接着被删除的最近的那一条记录ID加1后进行记录。如果只需删除表中的部分记录,只能使用 DELETE语句配合 where条件

        那么问题来了,如果某一个数据库中有很多张表,此时我想将该数据库中所有表中的数据全部删掉,该如何操作呢?

        解决该问题主要分两种情况,如果不需要保留数据库中所有表的结构,那么答案很简单,执行命令drop database 数据库名  即可达到目的。但是如果需要保留该数据库中所有表的结构,只想删除所有表中的数据,又该怎么解决呢?有人会说可以多执行几次truncate操作就OK啦,没错,多执行几次truncate确实可以达到目的,但是,如果要删除的数据库中有很多张表,几十张上百张表,执行上百次truncate操作显然不是好的办法?至此,就是本文要说讲到的办法了。
        删除的办法其实还是执行truncat方法,只是不需要每次手动的输入truncate命令进行删除。通过sql命令的方式生成所有的truncate语句并写入到.sql脚本文件中,然后执行脚本即可完成删除操作,并且保留了表结构。

        生成truncate命令的sql语句为:SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' into outfile '/tmp/truncate_test.sql';

        然后将生成的.sql脚本拷贝到当前文件夹下面:mv /tmp/truncate_test.sql $current_dir/

        然后执行.sql脚本将数据库中所有表中数据删除:source $current_dir/truncate_test.sql

        说明:

        在进行select....into outfile......操作时,会遇到报错的情况: MySQL server is running with the --secure-file-priv option so it cannot execute this statement,这个原因其实很简单,是因为在安装MySQL的时候限制了导入与导出的目录权限,只能在规定的目录下才能导入我们需要通过下面命令查看 secure-file-priv 当前的值是什么

show variables like '%secure%';我们可以看到value的值为

MYSQL:如何清空表中的数据(一张表和多张表)_第1张图片

那么我们把导入的路径改为上面的值就可以了
=

MYSQL:如何清空表中的数据(一张表和多张表)_第2张图片

打开文件:

MYSQL:如何清空表中的数据(一张表和多张表)_第3张图片

你可能感兴趣的:(mysql)