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

StackOverflow https://stackoverflow.com/questions/3493253

  •  28-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

// Редактировать Вы можете получить эту информацию, используя запрос 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. Что-то влиять на эффект:

Выберите «Drop Table» || table_name || ';' от user_tables;

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

Таблица сброса таблицы1;

Капля стола таблица2;

Таблица сброса Таблица 3;

и т.д...

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

Вы можете выполнить это. Просто добавьте больше таблиц, если я пропустил

drop table wp_commentmeta;
drop table wp_comments;
drop table wp_links;
drop table wp_options;
drop table wp_postmeta;
drop table wp_posts;
drop table wp_term_relationships;
drop table wp_term_taxonomy;
drop table wp_termmeta;
drop table wp_terms;
drop table wp_usermeta;
drop table wp_users;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top