У MySQL можна повністю очистити таблицю за допомогою двох основних команд:
1. DELETE
(повільний, зберігає структуру та AUTO_INCREMENT)
DELETE FROM table_name;
Видаляє всі рядки, але зберігає структуру таблиці.Якщо в таблиці є AUTO_INCREMENT, лічильник не скидається.Для прискорення можна використати DELETE FROM table_name WHERE 1=1;
2. TRUNCATE TABLE
(швидкий, скидає AUTO_INCREMENT)
TRUNCATE TABLE table_name;
Швидший за DELETE
, бо не записує операції для кожного рядка в лог транзакцій.Скидає AUTO_INCREMENT до 1.Не можна використовувати з таблицями, що мають зовнішні ключі (FOREIGN KEY
), якщо FOREIGN_KEY_CHECKS=1
.
Який варіант вибрати?
- Якщо потрібно просто очистити дані та зберегти AUTO_INCREMENT –
DELETE
. - Якщо потрібна швидкість і можна скинути AUTO_INCREMENT –
TRUNCATE
.
Якщо ж потрібно видалити саму таблицю разом із її структурою:
DROP TABLE table_name;
Ця команда повністю видалить таблицю, тому потім доведеться створювати її заново.
Якщо таблиця має зовнішні ключі, перед TRUNCATE
чи DELETE
потрібно вимкнути перевірку:
SET FOREIGN_KEY_CHECKS=0; TRUNCATE TABLE table_name; SET FOREIGN_KEY_CHECKS=1;
Ось кілька прикладів PHP-коду, що виконують очищення таблиці в MySQL за допомогою DELETE
, TRUNCATE
і DROP TABLE
.
1. Використання DELETE
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test_db"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Помилка підключення: " . $conn->connect_error); } $sql = "DELETE FROM table_name"; // Видаляє всі дані, але зберігає структуру if ($conn->query($sql) === TRUE) { echo "Дані успішно видалені!"; } else { echo "Помилка: " . $conn->error; } $conn->close(); ?>
2. Використання TRUNCATE TABLE
(швидше, скидає AUTO_INCREMENT)
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test_db"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Помилка підключення: " . $conn->connect_error); } $sql = "TRUNCATE TABLE table_name"; // Швидко очищає таблицю if ($conn->query($sql) === TRUE) { echo "Таблиця очищена!"; } else { echo "Помилка: " . $conn->error; } $conn->close(); ?>
3. Використання DROP TABLE
(видаляє таблицю повністю)
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test_db"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Помилка підключення: " . $conn->connect_error); } $sql = "DROP TABLE table_name"; // Видаляє таблицю повністю if ($conn->query($sql) === TRUE) { echo "Таблиця видалена!"; } else { echo "Помилка: " . $conn->error; } $conn->close(); ?>
Який варіант вибрати?
DELETE
– якщо потрібно очистити всі записи, зберігаючи AUTO_INCREMENT.TRUNCATE TABLE
– якщо потрібно швидко очистити таблицю і скинути AUTO_INCREMENT.DROP TABLE
– якщо потрібно повністю видалити таблицю.
💡 Якщо таблиця має FOREIGN KEY, перед TRUNCATE
або DELETE
додайте:
$conn->query("SET FOREIGN_KEY_CHECKS=0"); $conn->query("TRUNCATE TABLE table_name"); $conn->query("SET FOREIGN_KEY_CHECKS=1");