我正在寻找一个查询(或一系列)TRUNCATE我的架构中的所有表(有几百个表)除了4个特定的表。我该怎么做呢?谢谢!
答案 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