我在寻找一个查询(或系列)截断,除了4成特定的人在我的架构中的所有表(其中有几百个表)。 我会如何做呢? 谢谢!
Answer 1:
我认为你必须写在任何语言中,你最喜欢的脚本。 你可以得到表的列表从INFORMATION_SCHEMA数据库的架构,然后在它们之间迭代,截断任何你觉得像。
查询会是这样的:
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) }
Answer 2:
另一种方法可能是你复制这四个表中的一个新的架构,然后删除原始数据库架构。
Answer 3:
* nix中的一行:
for i in `mysql -e "show tables MY_DB" | grep -vE "(table1|table2)"`; do mysql -e"TRUNCATE ${i}" MY_DB; done
文章来源: Is there a way to TRUNCATE most tables in a MySQL schema?