在開發或測試環境中,常需要快速清空資料庫所有資料表。本文提供一個簡單的 PHP 腳本,利用 SHOW TABLE STATUS 取得所有表名,再逐一執行 DROP TABLE 完成批量刪除。
<?php
$hostname = 'localhost';
$userid = 'admin';
$password = 'admin';
$dbname = 'admin';
$connect = mysql_connect($hostname, $userid, $password);
mysql_select_db($dbname, $connect);
$result = mysql_query("SHOW TABLE STATUS FROM `$dbname`", $connect);
while ($data = mysql_fetch_array($result)) {
$table = $data['Name'];
mysql_query("DROP TABLE `$table`", $connect);
echo "Dropped: $table\n";
}
?>
SHOW TABLE STATUS 而非 SHOW TABLES,可同時取得表引擎、行數等資訊,便於後續擴充(如只刪除特定引擎的表)。` 包裹,防止保留字或特殊字元導致語法錯誤。mysql_* 函數已棄用(PHP 7.0+ 移除),建議改用 PDO 或 mysqli:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=admin", 'admin', 'admin');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$tables = $pdo->query("SHOW TABLE STATUS FROM `admin`")->fetchAll(PDO::FETCH_COLUMN, 0);
foreach ($tables as $table) {
$pdo->exec("DROP TABLE `$table`");
echo "Dropped: $table\n";
}
?>
DROP DATABASE `admin`; CREATE DATABASE `admin` CHARACTER SET utf8mb4;information_schema.TABLES 產生 TRUNCATE TABLE 語句批次執行。批量刪除表是雙面刃,用對場景能大幅提升效率,用錯環境則是災難。請謹慎評估後再執行。