INSERT INTO în MySQL

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

Adaugă unul sau mai multe rânduri noi într-un tabel.

Sintaxă
INSERT INTO tabel (coloana1, coloana2) VALUES (valoare1, valoare2);

Ce face INSERT INTO

INSERT INTO adaugă rânduri. Scrie mereu lista de coloane: interogarea rămâne corectă chiar dacă tabelul primește coloane noi, iar coloanele omise primesc valoarea implicită sau NULL.

Poți adăuga mai multe rânduri dintr-o singură comandă, cu mai multe grupuri de valori separate prin virgulă. Este mult mai rapid decât câte o comandă pentru fiecare rând.

O coloană cu AUTO_INCREMENT primește automat următorul număr dacă nu îi dai valoare.

Parametri

Parametru Descriere
tabel Tabelul în care adaugi.
coloana1, coloana2 Coloanele completate.
valoare1, valoare2 Valorile, în aceeași ordine ca lista de coloane.

Exemple

Exemplul 1: Un rând, cu id automat

CREATE TABLE abonati (
  id INT AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(100) NOT NULL,
  activ INT DEFAULT 1
);

INSERT INTO abonati (email) VALUES ('ana@exemplu.ro');
INSERT INTO abonati (email, activ) VALUES ('dan@exemplu.ro', 0);

SELECT * FROM abonati;

Rezultat

+----+----------------+-------+
| id | email          | activ |
+----+----------------+-------+
|  1 | ana@exemplu.ro |     1 |
|  2 | dan@exemplu.ro |     0 |
+----+----------------+-------+

Exemplul 2: Mai multe rânduri dintr-o comandă

CREATE TABLE orase (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nume VARCHAR(50) NOT NULL
);

INSERT INTO orase (nume) VALUES ('Cluj'), ('Sibiu'), ('Arad');

SELECT * FROM orase;

Rezultat

+----+-------+
| id | nume  |
+----+-------+
|  1 | Cluj  |
|  2 | Sibiu |
|  3 | Arad  |
+----+-------+

Exemplul 3: Inserare sau actualizare (ON DUPLICATE KEY UPDATE)

Dacă există deja un rând cu aceeași cheie unică, MySQL îl actualizează în loc să dea eroare. Sintaxa este specifică MySQL și MariaDB.

CREATE TABLE vizite (
  pagina VARCHAR(100) PRIMARY KEY,
  numar INT NOT NULL
);

INSERT INTO vizite (pagina, numar) VALUES ('/contact/', 1)
  ON DUPLICATE KEY UPDATE numar = numar + 1;
INSERT INTO vizite (pagina, numar) VALUES ('/contact/', 1)
  ON DUPLICATE KEY UPDATE numar = numar + 1;

SELECT * FROM vizite;

Rezultat în MySQL

+-----------+-------+
| pagina    | numar |
+-----------+-------+
| /contact/ |     2 |
+-----------+-------+

Greșeli frecvente

  • Omiți lista de coloane: INSERT INTO abonati VALUES (...). Trebuie să dai valori pentru toate coloanele, în ordinea exactă din tabel, iar comanda se strică la prima coloană nouă.
  • Construiești comanda lipind în text valorile primite de la vizitatori. Ești expus la SQL injection. În PHP folosește interogări pregătite (prepare cu ?).

Comenzi înrudite

  • UPDATE: Modifică valorile din rândurile existente ale unui tabel.
  • CREATE TABLE: Creează un tabel nou, cu coloanele și tipurile lor de date.
  • DELETE: Șterge rânduri dintr-un tabel.