我正在寻找一个查询(或一系列)来截断我的架构中的所有表(有几百个表),除了 4 个特定的表。我该怎么做呢?谢谢!
问问题
1137 次
3 回答
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) }
于 2009-06-01T15:33:06.770 回答
0
另一种方法可能是将这四个表复制到新架构中,然后删除原始数据库架构。
于 2009-06-01T15:44:26.000 回答
0
*nix 单线:
for i in `mysql -e "show tables MY_DB" | grep -vE "(table1|table2)"`; do mysql -e"TRUNCATE ${i}" MY_DB; done
于 2009-06-01T16:27:33.343 回答