close

Beszúrás (SQL)

Ugrás a navigációhoz Ugrás a kereséshez

Az INSERT  egy SQL utasítás , amely lehetővé teszi, hogy sorokat adjon hozzá egy táblázathoz úgy, hogy azokat értékekkel tölti fel. Az értékek beszúrhatók felsorolással az értékek szó használatával, és zárójelben, vesszővel elválasztva, vagy a select utasítás használatával .

Használati példák

Értékek felsorolásával, oszlopok megadásával:

szúrjon  be a  < tábla neve  > ( [ < Oszlopnév > , ... ]) értékekbe ( < Érték > ,...)      

Például:

INSERT  INTO  phone_book  ( név ,  szám )  VALUES  ( 'John Doe' ,  '555-1212' );

Értékek felsorolásával, oszlopok megadása nélkül:

szúrjon  be a  < táblanév  > értékekbe ( < érték > , ...)  

Például:

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

A kiválasztással:

szúrjon  be a  < táblanévbe  > válassza ki az < oszlopnév > , ... elemet a < táblázat neve > közül      

Ez utóbbi esetben egynél több rekord is beilleszthető a táblázatba. Ha a táblában vannak más olyan mezők is, amelyeket ki kell tölteni, de az insert utasításban nincs megadva, akkor ezek az alapértelmezett értékre lesznek állítva, vagy nullára kerülnek, ha nincs megadva alapértelmezett érték.

Alternatív szintaxis az INSERT utasításhoz

Egyes DBMS-ek, például a MySQL, alternatív szintaxissal rendelkeznek az INSERT utasításhoz, amelyben az értékek a SET kulcsszó használatával vannak hozzárendelve az oszlopokhoz:

beszúrás  a  < táblanév  > készletbe < oszlopnév 1 > = < 1. érték > , < oszlopnév 2 > = < 2. érték > ... _ _ _         

Jellemzők

Az utasítás végrehajtása során hibák fordulhatnak elő:

  • ha a mezőt nem null paraméterrel hoztuk létre, és nem adtunk meg alapértelmezett értéket (lásd a create ), akkor hiba történik, ha nincs hozzá beilleszthető érték. A megoldás nyilvánvaló:
    • vagy távolítsa el a not null paramétert
    • vagy adjon meg egy alapértelmezett értéket
    • vagy szúrjon be értéket
  • ha típusazonosságú mezőbe próbálnak beszúrni (autoincrement), akkor szintén hiba lép fel. A probléma megoldásának két módja van:
    • ne írjon be értéket ebbe a mezőbe
    • adja meg az Identity_insert on beállítást, majd szúrjon be egy egyedi értéket ehhez az oszlophoz

Identity_insert beállítás (MS SQL Server)

ez az utasítás nem fog működni, meg kell adni a tábla nevét.

Opció engedélyezése:

 SET  IDENTITY_INSERT  táblázat  {  BE  |  KI  }

Az opció engedélyezése után értékeket szúrhat be az identitásként meghatározott mezőkbe. Vegye figyelembe, hogy az értéknek egyedinek kell lennie.

Ennek az opciónak az engedélyezése egyértelmű szükség nélkül nem javasolt. Mindazonáltal olyan rekordokban kell használni, ahol egyes oszlopokat az identitásoszlop megváltoztatása nélkül kell módosítani (például ha ez az oszlop egy másik táblához kapcsolódik).

A kulcs megszerzése

Azok a fejlesztők, akik helyettesítő kulcsot használnak elsődleges kulcsként, gyakran olyan forgatókönyvbe ütköznek, amikor meg kell szerezniük az elsődleges kulcsot (más lekérdezésekhez), amelyeket az adatbázis generál egy SQL INSERT utasításra válaszul. A legtöbb rendszer azonban nem engedi, hogy az SQL INSERT utasítás visszaadjon adatokat. Lehetséges megoldások:

  • Használjon adatbázis-specifikus tárolt eljárást , amely helyettesítő kulcsot generál, végrehajt egy INSERT műveletet, és visszaadja a generált kulcsot. Például a Microsoft SQL Serverben a kulcsot a SCOPE_IDENTITY() speciális függvény adja vissza, az SQLite esetében pedig a last_insert_rowid() függvény.
  • Használjon adatbázis-specifikus SELECT műveletet az utoljára hozzáadott sort (vagy sorokat) tartalmazó ideiglenes táblán. A DB2 ezt a szolgáltatást a következőképpen valósítja meg:
SELECT  * 
A ZÁRÓ TÁBLÁZATBÓL ( INSERT INTO phone_book  VALUES ( 'Peter Doe' , '555-2323' ) ) AS t            
A DB2 for z/OS a következőképpen valósítja meg ezt a képességet:
KIVÁLASZTÁS  EMPNO ,  HIRETYPE ,  BÉRDEZÉS DÁTUMA A  
ZÁRÓTÁBLÁBÓL ( BESZÁLLÍTÁSA AZ  EMPSAMP  - ba ( NÉV , BÉR , DEPTNO , SZINT ) ÉRTÉKEK ( ' Mary Smith ' , 35000. 00 , 11 , " Társ " ) ;            
  • SELECT utasítás használatával az INSERT utasítás után, egy speciális függvénnyel, amely egy adott adatbázisban az utoljára hozzáadott sor generált elsődleges kulcsát adja vissza.
  • Az eredeti SQL INSERT utasítás részét képező mezők egyedi kombinációjának használatával a SELECT utasítás következő hívásaiban .
  • Az SQL INSERT utasításban lévő GUID használatával kapja meg az eredményt egy SELECT utasításon keresztül .
  • A MySQL mysql_insert_id() PHP függvény használatával az INSERT utasítás után.
  • az INSERT, majd a SELECT LAST_INSERT_ID() használatával a MySQL -hez .
  • Az INSERT utasítás használata OUTPUT záradékkal (Transact-SQL) a Microsoft SQL Server 2005 óta .
DECLARE  @ table  TABLE  ( 
	[ id ]  [ smallint ]  IDENTITY ( 1 , 1 )  NOT  NULL , 
	[ name ]  [ nchar ]( 50 )  NULL );
 
INSERT  INTO  @ table 
    OUTPUT  INSERTED . id 
VALUES  ( 'Péter Doe' );
  • Az INSERT utasítás használata a RETURNING módosítóval a PostgreSQL (8.2-es verziótól) és a Firebird ( 2.0-s verziótól ) esetén. A visszaadott lista megegyezik a SELECT utasítás eredményével.
 BESZÁLLÍTÁS  A telefonkönyvbe:  ÉRTÉKEK  (  'Peter Doe' , ' 555-2323 '  ) 
VISSZATÉRŐ  telefonkönyv_azonosító
  • Az INSERT utasítás használata az Oracle RETURNING módosítójával . Ugyanezt a szintaxist használja a Firebird az eljárásokhoz, a triggerekhez és a végrehajtási blokkokhoz.
INSERT  INTO  A phonebook  VALUES  (  'Peter Doe' , '555-2323'  ) A 
phone_book_id VISSZATÉRÉSE  A v_pb_id  
  • Az IDENTITY() függvény a H2 -ben visszaadja az utoljára hozzáadott (kulcsot?)
 AZONOSÍTÁS KIVÁLASZTÁSA ();

Lásd még