1

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

4

3 回答 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 回答