Пустая база данных в MySQL и PHP? - PullRequest
13 голосов
/ 07 апреля 2009

Можно ли очистить всю базу данных, подключившись к ней с помощью PHP и дав команду?

Ответы [ 6 ]

15 голосов
/ 07 апреля 2009

Самый простой способ сделать это, если у вас есть права, это:

DROP DATABASE dbName;
CREATE DATABASE dbName;
USE DATABASE dbName;

Альтернатива - запросить в базе данных information_schema триггеры, сохраненные подпрограммы (процедуры и функции), таблицы, представления и, возможно, что-то еще, и удалить их по отдельности.

Даже после этого ваша база данных может по-прежнему не находиться в том же состоянии, что и вновь созданная, поскольку она может иметь собственный набор символов по умолчанию и набор параметров сортировки. Используйте ALTER DATABASE, чтобы изменить это.

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

6 голосов
/ 07 апреля 2009

Вы можете получить имена таблиц с помощью

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db'

И сделай усечение,

даже, вы можете сделать

SELECT 'TRUNCATE TABLE ' + table_name + ';' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db'

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

4 голосов
/ 30 августа 2015

Вы можете получить список всех таблиц в базе данных ($databaseName), просмотреть их все и применить TRUNCATE TABLE к каждой.

$result = mysqli_query($link, "SHOW TABLES IN `$databaseName`"); 
while ($table = mysqli_fetch_array($result)) {
    $tableName = $table[0];
    mysqli_query($link, "TRUNCATE TABLE `$databaseName`.`$tableName`");

    if (mysqli_errno($link)) echo mysqli_errno($link) . ' ' . mysqli_error($link);
    else echo "$tableName was cleared<br>";
}

Это очищает содержимое всех таблиц в базе данных, сохраняя структуру.

2 голосов
/ 05 октября 2016

Это сработало для меня.

mysql -u < DB-USER > -p<DB-PASS> --silent --skip-column-names -e "SHOW TABLES" <DB-NAME> | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -u < DB-USER > -p< DB-PASS > -v < DB-NAME >
2 голосов
/ 07 апреля 2009

Да. По сути, вам нужно получить список всех таблиц в базе данных, затем выполнить итерацию по этому списку и выдать TRUNCATE TABLE $tablename для каждой записи.

Это выглядит как достаточно приличная реализация: Усечение всех таблиц в базе данных MySQL

0 голосов
/ 18 ноября 2018
<?php
    $connection = new mysqli($host, $user, $pass, $db);
    $sql = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '".$db."'";
    $result = $connection->query($sql);
    $tables = $result->fetch_all(MYSQLI_ASSOC);
    foreach($tables as $table) {
        $sql = "TRUNCATE TABLE `".$table['TABLE_NAME']."`";
        $result = $connection->query($sql);
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...