Inserare (SQL)

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 7 octombrie 2016; verificările necesită 9 modificări .

INSERT  este o instrucțiune SQL care vă permite să adăugați rânduri la un tabel completându-le cu valori. Valorile pot fi inserate prin enumerare folosind cuvântul valori și enumerate în paranteze, separate prin virgule, sau folosind instrucțiunea select .

Exemple de utilizare

Folosind o enumerare de valori, specificând coloane:

inserați în < nume tabel > ([ < Nume coloană > , ... ]) valori ( < Valoare > ,...)

De exemplu:

INSERT INTO phone_book ( nume , număr ) VALUES ( 'John Doe' , '555-1212' );

Folosind o enumerare de valori, fără a specifica coloane:

inserați în < nume tabel > valori ( < valoare > ,...)

De exemplu:

INSERT INTO phone_book VALUES ( 'John Doe' , '555-1212' );

Folosind select:

inserați în < nume tabel > selectați < nume coloană > ,... din < nume tabel >

În acest din urmă caz, mai multe înregistrări pot fi introduse în tabel. Dacă există alte câmpuri în tabel care trebuie completate, dar nu sunt specificate în instrucțiunea de inserare, acestea vor fi setate la valoarea implicită sau null dacă nu este specificată nicio valoare implicită.

Sintaxă alternativă pentru instrucțiunea INSERT

Unele SGBD, cum ar fi MySQL, au o sintaxă alternativă pentru instrucțiunea INSERT, în care valorile sunt atribuite coloanelor folosind cuvântul cheie SET:

introduceți în < numele tabelului > setați < numele coloanei 1 > = < valoarea 1 > , < numele coloanei 2 > = < valoarea 2 > ...

Caracteristici

În timpul executării instrucțiunii, pot apărea erori:

  • dacă câmpul a fost creat cu parametrul not null și nu a fost specificată nicio valoare implicită (vezi create ), atunci va apărea o eroare dacă nu există o valoare inserabilă pentru acesta. Solutia este evidenta:
    • sau eliminați parametrul not null
    • sau specificați o valoare implicită
    • sau introduceți valoarea
  • dacă există o încercare de inserare într-un câmp cu identitate de tip (autoincrement), atunci va apărea și o eroare. Există două moduri de a rezolva problema:
    • nu introduceți o valoare în acest câmp
    • specificați opțiunea identity_insert on și apoi introduceți o valoare unică pentru această coloană

opțiunea identity_insert (MS SQL Server)

această declarație nu va funcționa, trebuie să specificați numele tabelului.

Activați opțiunea:

SET IDENTITY_INSERT tabelul { ON | OFF }

După activarea acestei opțiuni, puteți introduce valori în câmpurile definite ca identitate. Rețineți că valoarea trebuie să fie unică.

Activarea acestei opțiuni fără o necesitate clară nu este recomandată. Cu toate acestea, ar trebui să fie utilizat în înregistrările în care unele coloane trebuie modificate fără a modifica coloana de identitate (de exemplu, dacă această coloană este legată de un alt tabel)

Obținerea cheii

Dezvoltatorii care folosesc o cheie surogat ca cheie primară se confruntă adesea cu un scenariu în care trebuie să obțină cheia primară (pentru a fi utilizată în alte interogări) generată de baza de date ca răspuns la o instrucțiune SQL INSERT. Dar majoritatea sistemelor nu permit instrucțiunii SQL INSERT să returneze date. Solutii posibile:

  • Utilizați o procedură stocată specifică bazei de date care generează o cheie surogat, efectuează o operație INSERT și returnează cheia generată. De exemplu, în Microsoft SQL Server, cheia este returnată de funcția specială SCOPE_IDENTITY(), iar în SQLite de funcția last_insert_rowid().
  • Utilizați o operațiune SELECT specifică bazei de date pe un tabel temporar care conține ultimul rând (sau rânduri) adăugate. DB2 implementează această caracteristică după cum urmează:
SELECTAȚI * FROM FINAL TABLE ( INSERT INTO phone_book VALUES ( 'Peter Doe' , '555-2323' ) ) AS t DB2 pentru z/OS implementează această capacitate după cum urmează: SELECTEAZĂ EMPNO , HIRETYPE , HREDATE FROM FINAL TABLE ( INSERT INTO EMPSAMP ( NUME , SALARIU , DEPTNO , NIVEL ) VALORI ( ' Mary Smith ' , 35000 . 00 , 11 , ' Asociat ' ));
  • Prin utilizarea unei instrucțiuni SELECT după o instrucțiune INSERT, cu o funcție specială care, într-o bază de date dată, returnează cheia primară generată pentru ultimul rând adăugat.
  • Prin utilizarea combinației unice de câmpuri care făceau parte din instrucțiunea SQL INSERT originală în apelurile ulterioare la instrucțiunea SELECT .
  • Folosind GUID -ul într-o instrucțiune SQL INSERT, obțineți rezultatul printr-o instrucțiune SELECT .
  • Folosind funcția MySQL mysql_insert_id() PHP după instrucțiunea INSERT.
  • folosind INSERT urmat de SELECT LAST_INSERT_ID() pentru MySQL .
  • Folosind instrucțiunea INSERT cu o clauză OUTPUT (Transact-SQL) începând cu Microsoft SQL Server 2005 .
DECLARE @ table TABLE ( [ id ] [ smallint ] IDENTITY ( 1 , 1 ) NOT NULL , [ name ] [ nchar ]( 50 ) NULL ); INSERT INTO @ table OUTPUT INSERTED . ID VALUES ( „Peter Doe” );
  • Folosind instrucțiunea INSERT cu modificatorul RETURNING pentru PostgreSQL (din versiunea 8.2) și Firebird (din versiunea 2.0 ). Lista returnată este identică cu rezultatul instrucțiunii SELECT.
INSERT INTO phone_book VALUES ( 'Peter Doe' , '555-2323' ) RETURNING phone_book_id
  • Folosind instrucțiunea INSERT cu modificatorul RETURNING pentru Oracle . Aceeași sintaxă este folosită în Firebird pentru proceduri, declanșatoare și blocuri de execuție.
INSERT INTO phone_book VALUES ( 'Peter Doe' , '555-2323' ) RETURNING phone_book_id INTO v_pb_id
  • Funcția IDENTITY() din H2 returnează ultima adăugată (cheie?)
SELECTARE IDENTITATE ();

Vezi și