Есть ли способ TRUNCATE большинства таблиц в схеме MySQL? - PullRequest
1 голос
/ 01 июня 2009

Я ищу запрос (или серию), чтобы TRUNCATE всех таблиц в моей схеме (которая имеет несколько сотен таблиц), за исключением 4 конкретных. Как я могу сделать это? Спасибо!

Ответы [ 3 ]

1 голос
/ 01 июня 2009

Полагаю, вам придется написать сценарий на любом языке, который вам больше нравится. Вы можете получить список таблиц в схеме из базы данных 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) }
0 голосов
/ 01 июня 2009

* nix однострочный:

for i in `mysql -e "show tables MY_DB" | grep -vE "(table1|table2)"`; do mysql -e"TRUNCATE ${i}" MY_DB; done
0 голосов
/ 01 июня 2009

Другой способ может состоять в том, что вы копируете эти четыре таблицы в новую схему, а затем удаляете исходную схему базы данных.

...