Operatorii de atribuire: = și := în MySQL

Operatori MySQL 5.0+

Dau o valoare unei variabile sau unei coloane: = în SET și UPDATE, := oriunde.

Sintaxă
SET @variabila = valoare
SET @variabila := valoare
UPDATE tabel SET coloana = valoare

Ce face Operatorii de atribuire: = și :=

În SET și în UPDATE ... SET, semnul = înseamnă atribuire. În rest (de exemplu în SELECT sau WHERE), = înseamnă comparație.

:= este întotdeauna atribuire. Atribuirea variabilelor în interiorul expresiilor (SELECT @x := ...) este depreciată; folosește SET sau SELECT ... INTO.

Parametri

Parametru Descriere
@variabila Variabila de utilizator (valabilă până la sfârșitul conexiunii).
valoare Valoarea atribuită.

Ce returnează

Atribuirea nu returnează un rezultat; în expresii (depreciat) returnează valoarea atribuită.

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(30),
  pret DECIMAL(10,2),
  stoc INT,
  reducere INT
);

INSERT INTO produse VALUES
  (1, 'Laptop', 3499.90, 4, NULL),
  (2, 'Mouse', 79.50, 25, 10),
  (3, 'Birou', 899.00, 0, 15),
  (4, 'Scaun', 649.99, 7, NULL),
  (5, 'Monitor', 1199.00, 3, 5);

Exemplul 1: Variabile cu SET

SET @tva = 21, @pret := 100;
SELECT @pret * (1 + @tva / 100) AS pret_cu_tva;

Rezultat

+-------------+
| pret_cu_tva |
+-------------+
|    121.0000 |
+-------------+

Exemplul 2: Valoare dintr-o interogare în variabilă

SELECT MAX(pret) INTO @cel_mai_scump FROM produse;
SELECT nume FROM produse WHERE pret = @cel_mai_scump;

Rezultat

+--------+
| nume   |
+--------+
| Laptop |
+--------+

Greșeli frecvente

  • Folosești SELECT @x := @x + 1 pentru numerotarea rândurilor. Este depreciat; folosește ROW_NUMBER() OVER (...).

Comenzi înrudite

  • Operatori de comparație: Compară două valori și returnează 1 (adevărat), 0 (fals) sau NULL.
  • UPDATE: Modifică valorile din rândurile existente ale unui tabel.
  • ROW_NUMBER(): Numerotează rândurile 1, 2, 3… în fiecare grup, fără să le comprime ca GROUP BY.