Как удалить все таблицы в базе данных, не удаляя саму базу данных?
Я хотел бы удалить все таблицы из базы данных, но не удаляет саму базу данных. Возможно ли это ? Я просто ищу более короткий путь, чем удаление базы данных и создать ее заново. Спасибо !
8 ответов
самое короткое-воссоздать базу данных. но если ты не хочешь...
Это для MySQL / PHP. Не проверено, но что-то в этом роде.
$mysqli = new mysqli("host", "my_user", "my_password", "database");
$mysqli->query('SET foreign_key_checks = 0');
if ($result = $mysqli->query("SHOW TABLES"))
{
while($row = $result->fetch_array(MYSQLI_NUM))
{
$mysqli->query('DROP TABLE IF EXISTS '.$row[0]);
}
}
$mysqli->query('SET foreign_key_checks = 1');
$mysqli->close();
нет простого способа сделать это. Либо вам нужно будет знать, какие таблицы находятся заранее:
//edit вы можете получить эту информацию, используя запрос SHOW TABLE STATUS
$tables = array('users','otherdata');
foreach($tables as $table){
db.execute("DROP TABLE "+$table);
}
или вы можете удалить базу данных и повторно создать ее пустой (это действительно не так много усилий!):
db.execute('DROP DATABASE SITEDATA');
db.execute('CREATE DATABASE SITEDATA');
вам нужно будет удалить каждую таблицу в БД отдельно, поэтому удаление базы данных и ее воссоздание на самом деле будет самым коротким маршрутом (и самым быстрым в этом отношении).
когда мне нужно было сделать это в Oracle, я бы написал оператор select, который генерировал бы операторы drop table для меня. Что-то вроде:
выберите 'DROP TABLE' | / table_name||'; ' из user_tables;
затем я мог бы передать вывод инструкции select в файл. После того, как я запустил это, у меня будет файл, который удалит все мои таблицы для меня. Это будет выглядеть примерно так:
ПАДЕНИЕ ТАБЛИЦЫ TABLE1;
ТАБЛИЦА ПАДЕНИЯ Таблица 2;
ПАДЕНИЕ ТАБЛИЦЫ TABLE3;
etc...
не эксперт mysql, но я бы предположил, что у него будет аналогичная возможность как выбрать все таблицы для схемы, так и прямой вывод из оператора SQL в файл.
использовать SHOW TABLE STATUS
чтобы получить все таблицы в вашей базе данных, затем петли за результат, и положить их один за другим.
в комментариях есть некоторые решения:http://dev.mysql.com/doc/refman/5.1/en/drop-table.html
Мне нужно было удалить все таблицы, кроме пары из непреднамеренного дампа.
функция PHP для удаления всех таблиц, кроме некоторых (адаптирована из здесь), для всех, кто может понадобиться:
<?php
$mysqli = new mysqli( "localhost", "user", 'password', "database");
function drop_all_tables($exceptions_array, $conn) {
$exceptions_string="('" ;
foreach ($exceptions_array as $table) {
$exceptions_string .=$table . "','";
}
$exceptions_string=rtrim($exceptions_string, ",'");
$exceptions_string .="')" ;
$sql="SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name NOT IN $exceptions_string";
$result=$ conn->query($sql);
while($row = $result->fetch_array(MYSQLI_NUM)) {
$conn->query($row[0]);
}
}
//drop_all_tables(array("table1","table2","table3","table4"), $mysqli);
?>
однострочный запрос для удаления всех таблиц, как показано ниже:
$dbConnection = mysqli_connect("hostname", "username", "password", "database_name");
$dbConnection->query('SET foreign_key_checks = 0');
$qry_drop = "DROP TABLE IF EXISTS buildings, business, computer, education, fashion, feelings, food, health, industry, music, nature, people, places, religion, science, sports, transportation, travel";
$dbConnection->query($qry_drop);
$mysqli->query('SET foreign_key_checks = 1');
$mysqli->close();