Intereting Posts

Как удалить все таблицы в базе данных, не отбрасывая сама база данных?

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

Самый короткий – это воссоздать базу данных. но если вы не хотите …

Это для 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'); 

Вам придется отбрасывать каждую таблицу в db отдельно, поэтому отбрасывание базы данных и ее повторное создание на самом деле будет самым коротким маршрутом (и самым быстрым в этом отношении).

Когда я должен был сделать это в Oracle, я бы написал инструкцию select, которая создавала бы инструкции для таблицы таблиц. Что-то вроде:

Выберите «DROP TABLE» || table_name || ';' из user_tables;

Затем я мог бы передать вывод инструкции select в файл. После того, как я запустил это, у меня был бы файл, который забросил бы все мои таблицы для меня. Это будет выглядеть примерно так:

ТАБЛИЦА ТАБЛИЦЫ ТАБЛИЦЫ 1;

ТАБЛИЦА ТАБЛИЦЫ DROP2;

ТАБЛИЦА ТАБЛИЦЫ ТАБЛИЦЫ;

и т.д…

Не эксперт 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); ?>