DELETE în MySQL

Adăugare, modificare, ștergere Toate versiunile MySQL și MariaDB

Șterge rânduri dintr-un tabel.

Sintaxă
DELETE FROM tabel WHERE conditie;

Ce face DELETE

DELETE șterge toate rândurile care îndeplinesc condiția din WHERE. Ștergerea este definitivă, dacă nu lucrezi într-o tranzacție.

Fără WHERE, sunt șterse toate rândurile din tabel. Verifică întâi cu un SELECT ce rânduri vor fi șterse. Pentru a goli complet un tabel mare, TRUNCATE TABLE este mai rapid.

Parametri

Parametru Descriere
WHERE conditie Rândurile șterse.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE produse (
  id INT PRIMARY KEY,
  nume VARCHAR(50) NOT NULL,
  categorie VARCHAR(30),
  pret INT,
  stoc INT
);

INSERT INTO produse VALUES
  (1, 'Laptop', 'Electronice', 3500, 4),
  (2, 'Mouse', 'Electronice', 80, 25),
  (3, 'Birou', 'Mobilier', 900, 0),
  (4, 'Scaun', 'Mobilier', 650, 7),
  (5, 'Monitor', 'Electronice', 1200, 3);

Exemplul 1: Ștergerea unui rând

DELETE FROM produse WHERE id = 3;

SELECT id, nume FROM produse;

Rezultat

+----+---------+
| id | nume    |
+----+---------+
|  1 | Laptop  |
|  2 | Mouse   |
|  4 | Scaun   |
|  5 | Monitor |
+----+---------+

Exemplul 2: Verificare cu SELECT, apoi ștergere

SELECT COUNT(*) FROM produse WHERE stoc = 0;

DELETE FROM produse WHERE stoc = 0;

SELECT COUNT(*) FROM produse;

Rezultat

+----------+
| COUNT(*) |
+----------+
|        1 |
+----------+
+----------+
| COUNT(*) |
+----------+
|        4 |
+----------+

Greșeli frecvente

  • Rulezi DELETE FROM produse fără WHERE și golești tabelul.
  • Ștergi un rând de care depind alte tabele. Cu o cheie străină, MySQL refuză ștergerea sau, cu ON DELETE CASCADE, șterge și rândurile legate.

Comenzi înrudite

  • WHERE: Filtrează rândurile: păstrează doar rândurile care îndeplinesc o condiție.
  • UPDATE: Modifică valorile din rândurile existente ale unui tabel.
  • START TRANSACTION / COMMIT / ROLLBACK: Grupează mai multe modificări: fie se aplică toate (COMMIT), fie niciuna (ROLLBACK).
  • DROP TABLE / TRUNCATE: Șterge un tabel cu totul (DROP) sau doar toate rândurile lui (TRUNCATE).