Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Нет простого способа сделать это. Либо вам нужно знать, что таблицы заблаговременно:

//отредактируйте, вы можете получить эту информацию, используя запрос 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');

Ответ 3

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

Ответ 4

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

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

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

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

ТАБЛИЦА ТАБЛИЦЫ DROP:

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

и т.д...

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

Ответ 5

Используйте SHOW TABLE STATUS, чтобы получить все таблицы в вашей базе данных, затем перебрать результат и отбросить их один за другим.

Ответ 7

Мне нужно было отбросить все таблицы, кроме пары из непреднамеренного дампа.

Функция 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);
?>