我想用一条sql实现清空test1和test2的数据。(即分别执行:DELETE FROM test1;DELETE FROM test2)
目前使用的sql语句:DELETE FROM test1,test2 USING test1,test2
遇到的问题:如果两个表都有数据,可以清空;如果只有1张表有数据,没法清空。
使用的mysql版本:5.0.45-community-nt-log.
请先测试后再回答,谢谢。
TRUNCATE试过,不过每次只能清一张,我的需求是1条sql清空多表数据,不删除表结构。
对的,我要用php去删除数据。我想只执行1次查询,而不是循环delete or truncate
追答无论你循环还是不循环,对数据库来说,消耗都是一样大的,mysql最多给你执行一个批处理,还是先清空一个,再清空另外一个。
追问哥们,你考虑了php操作mysql的代价吗?
照你的思路,如果我有一个test表,字段是id和t.我想插入的数据是
php代码1:
php代码2:
两者的效率是相同的?大错特错,迭代中执行的查询消耗远大于同样效果的单次查询。
如果你觉得我的结论是错的,请亲测。
我就问你,你的测试,这俩者之间有多少差距?
你要是做成千上万你的表的,删除工作,那你需要好好考虑,你一共会有多少个表清空操作?
我觉得你太钻了,再说了,我试着用几个工具,做了删减清空多个表的操作,这些工具的日志里都可以看出,人家用的就是删减一个,再删减第二个,依次执行,也就是批处理执行。
你有俩个问题:
1,表太多。
你会有同时做多少个表清空的操作?1百个,1千个?效率上会有多大差距?
2,你的表有多大
你的表会有多大?你说的这种清空,表一般不会很大吧,如果很大,你就不会考虑多个同时清空了吧。
所以,我觉得你再钻牛角尖,再说了,加入mysql没提供多个表清空操作,你又如何?
补充:像你这种需求,本身就不合理,清空删除临时表,还可以理解。你可以参考触发器
那你到底知不知道有这种sql语法啊?或者说mysql支不支持同时清空多表?
没的话就循环,有的话肯定就用那语法格式了。
你有车了难道还会去挤公交吗?
顺便补充:我测试的1个脚本插入50条数据代码1比代码2慢10倍(取1W次的平均值)。
有车了就不会挤公交了,但没车就不出门了么?
mysql支持多个表清空,但mysql做的是批处理,也就是清空一个,在清楚第二个。
至于mysql有没有一次性操作的支持,如果有,早就搜到了。你心里还没个答案么
保留表结构,用sql语句。
追答这个只是删数据啊
追问是啊,可是我要用PHP去执行sql语句啊