有没有办法截断在MySQL架构最表?(Is there a way to TRUNCATE most

2019-09-30 03:29发布

我在寻找一个查询(或系列)截断,除了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?