方法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的值为
那么我们把导入的路径改为上面的值就可以了
=
打开文件: