Можно ли очистить всю базу данных, подключившись к ней с помощью PHP и предоставив команду?Пустая база данных в MySQL и PHP?
ответ
Вы можете получить имена таблиц с
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'
А затем итерируете результирующее выполнение строки запроса для каждой записи ,
Да. В принципе, вам нужно получить список всех таблиц в базе данных, затем перебрать этот список и выпустить TRUNCATE TABLE $tablename
для каждой записи.
Это выглядит достаточно приличной реализации: Truncate all tables in a MySQL database
Самый простой способ сделать это, если у вас есть привилегии, это:
DROP DATABASE dbName; CREATE DATABASE dbName; USE DATABASE dbName;
Альтернативой является запрос к базе данных information_schema
для триггеров, хранимые процедуры (процедуры и функции), таблицы, представления и, возможно, что-то еще, и отбрасывать их по отдельности.
Даже после этого ваша база данных может все еще находиться не в том же состоянии, что и вновь созданная, поскольку она может иметь настраиваемый набор символов и набор символов. Используйте ALTER DATABASE
, чтобы изменить это.
Поскольку функции продолжают добавляться (события ...), у вас будет все больше и больше работать таким образом. Таким образом, единственный способ полностью очистить базу данных - это удалить ее и заново создать.
Вы можете получить список всех таблиц в базе данных ($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>";
}
Это очищает содержимое всех таблиц в базе данных, сохраняя структуру.
Пожалуйста, обратитесь к дополнительной информации. Только код и «попробуйте» ответы [обескуражены] (// meta.stackexchange.com/questions/196187), потому что они не содержат содержимого, доступного для поиска, и не объясняют, почему кто-то должен «попробовать это». Мы прилагаем усилия, чтобы стать источником знаний. – Mogsdad
Это сработало для меня.
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 >
вы потеряете структуры таблицы –
Ну тема стартер не сказать ничего, кроме того, что он хочет пустую базу данных с тем же именем, поэтому он прекрасно ответил на вопрос. Не имеет смысла делать ошибочные предположения, поэтому этот ответ получил от меня +1. – Flavius
Если пользователь не имеет привилегии CREATE DATABASE, они будут застревать. –