Infoga (SQL)
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 7 oktober 2016; kontroller kräver
9 redigeringar .
INSERT är en SQL-sats som låter dig lägga till rader i en tabell genom att fylla dem med värden. Värden kan infogas genom uppräkning med hjälp av ordvärdena och räknas upp inom parentes, separerade med kommatecken, eller genom att använda select- satsen .
Användningsexempel
Använd en uppräkning av värden och ange kolumner:
infoga i < tabellnamn > ([ < Kolumnnamn > , ... ]) värden ( < Värde > , ... )
Till exempel:
INSERT INTO phone_book ( namn , nummer ) VÄRDEN ( 'John Doe' , '555-1212' );
Använda en uppräkning av värden, utan att ange kolumner:
infoga i < tabellnamn > värden ( < värde > , ...)
Till exempel:
INSERT INTO phone_book VALUES ( 'John Doe' , '555-1212' );
Använda välj:
infoga i < tabellnamn > välj < kolumnnamn > , ... från < tabellnamn > _ _
I det senare fallet kan mer än en post infogas i tabellen. Om det finns andra fält i tabellen som behöver fyllas i men som inte anges i insert-satsen, kommer de att ställas in på standardvärdet, eller null om inget standardvärde anges.
Alternativ syntax för INSERT-satsen
Vissa DBMS, som MySQL, har en alternativ syntax för INSERT-satsen, där värden tilldelas kolumner med nyckelordet SET:
infoga i < tabellnamn > set < kolumnnamn 1 > = < värde 1 > , < kolumnnamn 2 > = < värde 2 > ... _ _ _
Funktioner
Under körningen av uttalandet kan fel uppstå:
- om fältet skapades med parametern not null och inget standardvärde angavs (se skapa ), kommer ett fel att uppstå om det inte finns något insättningsbart värde för det. Lösningen är uppenbar:
- eller ta bort parametern not null
- eller ange ett standardvärde
- eller infoga värde
- om det görs ett försök att infoga i ett fält med typidentitet (autoinkrement), kommer även ett fel att uppstå. Det finns två sätt att lösa problemet:
- infoga inte ett värde i det här fältet
- ange alternativet identity_insert on och infoga sedan ett unikt värde för denna kolumn
identity_insert option (MS SQL Server)
detta uttalande kommer inte att fungera, du måste ange tabellnamnet.
Aktivera alternativ:
SET IDENTITY_INSERT tabell { PÅ | AV }
Efter att ha aktiverat det här alternativet kan du infoga värden i fält som definieras som identitet. Observera att värdet måste vara unikt.
Att aktivera detta alternativ utan ett tydligt behov rekommenderas inte. Det bör dock användas i poster där vissa kolumner behöver ändras utan att ändra dess identitetskolumn (till exempel om denna kolumn är länkad till en annan tabell)
Få nyckeln
Utvecklare som använder en surrogatnyckel som primärnyckel stöter ofta på ett scenario där de behöver få primärnyckeln (för användning i andra frågor) genererad av databasen som svar på en SQL INSERT-sats. Men de flesta system tillåter inte SQL INSERT-satsen att returnera data. Möjliga lösningar:
- Använd en databasspecifik lagrad procedur som genererar en surrogatnyckel, utför en INSERT-operation och returnerar den genererade nyckeln. Till exempel, i Microsoft SQL Server returneras nyckeln av specialfunktionen SCOPE_IDENTITY() och i SQLite av funktionen last_insert_rowid().
- Använd en databasspecifik SELECT -operation på en temporär tabell som innehåller den senast tillagda raden (eller raderna). DB2 implementerar den här funktionen enligt följande:
VÄLJ *
FRÅN SLUTTABELLEN ( INFOGA I VÄRDEN I telefonboken ( 'Peter Doe' , '555-2323' ) ) SOM t
DB2 för z/OS implementerar denna funktion enligt följande:
VÄLJ EMPNO , HIRETYPE , HIREDATE
FRÅN SLUTTABELLEN ( INFOGA I EMPSAMP ( NAMN , LÖN , DEPTNO , LEVEL ) VÄRDEN ( ' Mary Smith ' , 35000 . 00 , 11 , ' Associate ' ) );
- Genom att använda en SELECT-sats efter en INSERT-sats, med en speciell funktion som, i en given databas, returnerar den genererade primärnyckeln för den senast tillagda raden.
- Genom att använda den unika kombinationen av fält som ingick i den ursprungliga SQL INSERT-satsen i efterföljande anrop till SELECT-satsen .
- Använd GUID i en SQL INSERT-sats, få resultatet genom en SELECT-sats .
- Genom att använda MySQL mysql_insert_id() PHP -funktionen efter INSERT-satsen.
- använder INSERT följt av SELECT LAST_INSERT_ID() för MySQL .
- Använder INSERT-satsen med en OUTPUT-sats (Transact-SQL) sedan Microsoft SQL Server 2005 .
DECLARE @ table TABELL (
[ id ] [ smallint ] IDENTITET ( 1 , 1 ) INTE NULL ,
[ namn ] [ nchar ]( 50 ) NULL );
INSERT INTO @ table
OUTPUT INSERT . id
VALUES ( 'Peter Doe' );
- Använda INSERT-satsen med RETURNING-modifieraren för PostgreSQL (från version 8.2) och Firebird (från version 2.0 ). Den returnerade listan är identisk med resultatet av SELECT-satsen.
INSERT I phone_book VALUES ( 'Peter Doe' , '555-2323' )
RETURNING phone_book_id
- Använda INSERT-satsen med RETURNING-modifieraren för Oracle . Samma syntax används i Firebird för procedurer, triggers och exekveringsblock.
INSERT I phone_book VALUES ( 'Peter Doe' , '555-2323' )
TILLBAKA phone_book_id INTO v_pb_id
- Funktionen IDENTITY() i H2 returnerar den senast tillagda (nyckel?)
VÄLJ IDENTITET ();
Se även
SQL |
---|
versioner |
- SQL-86
- SQL-89
- SQL-92
- SQL:1999
- SQL:2003
- SQL:2006
- SQL:2008
- SQL:2011
- SQL:2016
|
---|
Nyckelord |
|
---|
Relaterade artiklar |
|
---|
Delar av ISO/IEC SQL |
- Ramverk
- fundament
- Samtalsnivågränssnitt
- Beständiga lagrade moduler
- Hantering av extern data
- Objektspråksbindningar
- Informations- och definitionsscheman
- SQL-rutiner och -typer för programmeringsspråket Java
- XML-relaterade specifikationer
|
---|