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


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

Author: Misha Moroshko, 2010-08-16

8 answers

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

Это для 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();
 34
Author: Tomasz Struczyński, 2010-08-16 13:09:08

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

//редактировать вы можете получить эту информацию с помощью запроса 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');
 5
Author: fredley, 2010-08-16 13:08:21

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

 2
Author: wimvds, 2010-08-16 12:59:01

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

Выберите "УДАЛИТЬ ТАБЛИЦУ"||имя_таблицы ||';' из таблиц пользователей;

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

УДАЛИТЬ ТАБЛИЦУ ТАБЛИЦА1;

УДАЛИТЬ ТАБЛИЦУ ТАБЛИЦА2;

ВЫПАДАЮЩАЯ ТАБЛИЦА ТАБЛИЦА 3;

И т.д....

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

 2
Author: Brett McCann, 2010-08-16 12:59:02

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

 2
Author: IcanDivideBy0, 2010-08-16 13:05:21

Здесь в комментариях есть несколько решений: http://dev.mysql.com/doc/refman/5.1/en/drop-table.html

 2
Author: Vladislav Rastrusny, 2010-08-16 14:39:45

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

Функция 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);
?>
 2
Author: Abdul, 2017-05-23 11:55:19

Однострочный запрос для удаления всех таблиц, как показано ниже:

$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();
 0
Author: user9453341, 2018-07-30 20:05:47