Tutorial MySQL
BackNext
Comanda INSERT permite inserarea (adaugarea) de noi inregistrari (randuri) intr-o tabela.
Deoarece sistemul mySQL este pur relational, nu exista nici o diferenta intre inserarea de noi date sau adaugarea lor. In ambele situatii, locul in care se face adaugarea nu este precizat, nefiind relevant. La sistemele care nu sunt pur relationale (cum este dBase sau FoxPro) operatia de adaugare semnifica adaugarea la sfarsitul unei tabele, pe cand insertia inseamna inserarea intre alte doua inregistrari existente.
Comanda INSERT din mySQL are sintaxa de baza:
INSERT [LOW_PRIORITY | DELAYED]
[IGNORE]
[INTO] tbl_nume
[(col_nume,...)]
VALUES (expresie,...),(...),...
Parametrii au urmatoarea semnificatie:
- LOW_PRIORITY - se foloseste pentru a intarzia scrierea efectiva a datelor in tabela pana cand alti utilizatori nu mai citesc date din tabela. Acest lucru avantajeaza citirea dar intarzie, semnificativ pentru o tabela foarte utilizata, scrierea. Efectul este blocarea executiei pana cand se reuseste scrierea efectiva.
- DELAYED - are actiune opusa parametrului precedent. Inregistrarea care trebuie adaugata este pusa intr-o coada de asteptare pe server si controlul revine la client, ca si cum scrierea ar fi fost facuta efectiv. Avantajul consta in timpul mic de executie a comenzii INSERT pe o tabela utilizata intensiv. Dezavantajul consta in incarcarea serverului cu o operatie in plus si in pierderea datelor daca serverul se opreste neasteptat. Din aceasta cauza parametrul este folosit doar cand este cu adevarat necesar.
- IGNORE - este util daca se insereaza mai multe inregistrari simultan (in acest caz lista de dupa VALUES va contine mai multe seturi de date in paranteze, departite prin virgula). In mod obisnuit, MySQL raporteaza eroare si nu executa comanda care incearca adaugarea a cel putin unei inregistrari care duplica cheia primara sau campuri cu valori unice. Prin folosirea parametrului IGNORE inregistrarile gresite sunt ignorate, dar restul sunt adaugate fara raportarea unei erori. Dupa executia comenzii se va raporta doar numarul de inregistrari a caror adaugare a reusit.
- INTO - este optional, se foloseste pentru compatibilitate cu alte sisteme SQL. Datorita claritatii mai mari a interogarii se prefera totusi utilizarea lui.
- tbl_nume - specifica numele tabelei unde se adauga inregistrarile.
- (col_nume,...) - este o lista de coloane care specifica ordinea in care se vor adauga datele in tabela. Prin aceasta se pot insera doar datele considerate esentiale, restul primind valorile implicite specificate la declararea tabelei. Daca lista lipseste, setul de date furnizat trebuie sa aiba valori pentru toate campurile, in ordinea din declararea tabelei.
- VALUES - specifica seturile de date (inregistrarile) care se vor adauga in tabela.
- (expresie, ...),(...),... - fiecare paranteza specifica datele unei inregistrari ce va fi adaugata. Ele trebuie sa respecte numarul si ordinea coloanelor de la declararea tabelei sau, daca e specificat, numarul si ordinea campurilor din lisata de coloane (col_nume,...)prezentata anterior.
O sintaxa introdusa o data cu versiunea 3.22.10 permite specificarea explicita a corespondentei intre coloane si valorile inserate:
INSERT [LOW_PRIORITY | DELAYED]
[IGNORE]
[INTO] tbl_nume
SET col_nume1=expresie1, col_nume2=expresie2, ...
O a treia sintaxa permite adugarea automata a inregistrarilor prin selectia lor din alte tabele:
INSERT [LOW_PRIORITY | DELAYED]
[IGNORE]
[INTO] tbl_name
[(col_name,...)]
SELECT ...