有没有办法在MySQL模式中TRUNCATE大多数表?

时间:2009-06-01 15:22:03

标签: mysql truncate

我正在寻找一个查询(或一系列)TRUNCATE我的架构中的所有表(有几百个表)除了4个特定的表。我该怎么做呢?谢谢!

3 个答案:

答案 0 :(得分:1)

我相信你必须用你最喜欢的语言写一个剧本。您可以从information_schema db获取架构中的表列表,然后迭代它们,截断您想要的任何内容。

查询类似于:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'test' AND table_name NOT IN ('table1', 'table2');

编辑:以下是使用Perl的示例:

use strict;
use warnings;
use DBI;

my $dbh = DBI->connect("some_dsn");

my $sth = $dbh->prepare(q{SELECT table_name FROM information_schema.tables WHERE table_schema = 'test' AND table_name NOT IN ('table1', 'table2')});
$sth->execute();
$sth->bind_columns(\my $table_name);

while($sth->fetch) { $dbh->do(q{TRUNCATE TABLE } . $table_name) }

答案 1 :(得分:0)

另一种方法可能是您在新架构中复制这四个表,然后删除原始数据库架构。

答案 2 :(得分:0)

* nix one-liner:

for i in `mysql -e "show tables MY_DB" | grep -vE "(table1|table2)"`; do mysql -e"TRUNCATE ${i}" MY_DB; done