Beszúrás (SQL)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2016. október 7-én felülvizsgált verziótól ; az ellenőrzések 9 szerkesztést igényelnek .

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