Як в MySQL видалити дані з таблиці SQL запитом

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