2009-04-07 3 views

ответ

6

Вы можете получить имена таблиц с

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db' 

И сделать усечение,

даже, вы можете сделать

SELECT 'TRUNCATE TABLE ' + table_name + ';' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db' 

А затем итерируете результирующее выполнение строки запроса для каждой записи ,

2

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

Это выглядит достаточно приличной реализации: Truncate all tables in a MySQL database

12

Самый простой способ сделать это, если у вас есть привилегии, это:

 
DROP DATABASE dbName; 
CREATE DATABASE dbName; 
USE DATABASE dbName; 

Альтернативой является запрос к базе данных information_schema для триггеров, хранимые процедуры (процедуры и функции), таблицы, представления и, возможно, что-то еще, и отбрасывать их по отдельности.

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

Поскольку функции продолжают добавляться (события ...), у вас будет все больше и больше работать таким образом. Таким образом, единственный способ полностью очистить базу данных - это удалить ее и заново создать.

+0

вы потеряете структуры таблицы –

+1

Ну тема стартер не сказать ничего, кроме того, что он хочет пустую базу данных с тем же именем, поэтому он прекрасно ответил на вопрос. Не имеет смысла делать ошибочные предположения, поэтому этот ответ получил от меня +1. – Flavius

+0

Если пользователь не имеет привилегии CREATE DATABASE, они будут застревать. –

4

Вы можете получить список всех таблиц в базе данных ($databaseName), пропустить их все и применить TRUNCATE TABLE к каждому.

$result = mysqli_query($link, "SHOW TABLES IN `$databaseName`"); 
while ($table = mysqli_fetch_array($result)) { 
    $tableName = $table[0]; 
    mysqli_query($link, "TRUNCATE TABLE `$databaseName`.`$tableName`"); 

    if (mysqli_errno($link)) echo mysqli_errno($link) . ' ' . mysqli_error($link); 
    else echo "$tableName was cleared<br>"; 
} 

Это очищает содержимое всех таблиц в базе данных, сохраняя структуру.

+1

Пожалуйста, обратитесь к дополнительной информации. Только код и «попробуйте» ответы [обескуражены] (// meta.stackexchange.com/questions/196187), потому что они не содержат содержимого, доступного для поиска, и не объясняют, почему кто-то должен «попробовать это». Мы прилагаем усилия, чтобы стать источником знаний. – Mogsdad

2

Это сработало для меня.

mysql -u < DB-USER > -p<DB-PASS> --silent --skip-column-names -e "SHOW TABLES" <DB-NAME> | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -u < DB-USER > -p< DB-PASS > -v < DB-NAME >