У 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");
