Indsæt (SQL)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 7. oktober 2016; checks kræver 9 redigeringer .

INSERT  er en SQL-sætning , der giver dig mulighed for at tilføje rækker til en tabel ved at udfylde dem med værdier. Værdier kan indsættes ved opregning ved hjælp af ordværdier og opregnet i parentes, adskilt med kommaer, eller ved at bruge select -sætningen .

Eksempler på brug

Ved hjælp af en opregning af værdier, angivelse af kolonner:

indsæt i < tabelnavn > ( [ < Kolonnenavn > , ... ]) værdier ( < Værdi > ,... )

For eksempel:

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

Brug af en opregning af værdier uden at angive kolonner:

indsæt i < tabelnavn > værdier ( < værdi > , ...)

For eksempel:

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

Brug af vælg:

indsæt i < tabelnavn > vælg < kolonnenavn > , ... fra < tabelnavn > _ _

I sidstnævnte tilfælde kan der indsættes mere end én post i tabellen. Hvis der er andre felter i tabellen, der skal udfyldes, men som ikke er angivet i insert-sætningen, vil de blive sat til standardværdien eller null, hvis der ikke er angivet nogen standardværdi.

Alternativ syntaks for INSERT-sætningen

Nogle DBMS'er, såsom MySQL, har en alternativ syntaks til INSERT-sætningen, hvor værdier tildeles til kolonner ved hjælp af SET nøgleordet:

indsæt i < tabelnavn > sæt < kolonnenavn 1 > = < værdi 1 > , < kolonnenavn 2 > = < værdi 2 > ... _ _ _

Funktioner

Under udførelsen af ​​erklæringen kan der opstå fejl:

  • hvis feltet blev oprettet med parameteren ikke null, og der ikke blev angivet nogen standardværdi (se create ), så vil der opstå en fejl, hvis der ikke er en indsætbar værdi for det. Løsningen er indlysende:
    • eller fjern parameteren ikke null
    • eller angiv en standardværdi
    • eller indsæt værdi
  • hvis der er et forsøg på at indsætte i et felt med typeidentitet (autoincrement), så vil der også opstå en fejl. Der er to måder at løse problemet på:
    • indsæt ikke en værdi i dette felt
    • angiv muligheden identity_insert on, og indsæt derefter en unik værdi for denne kolonne

identity_insert option (MS SQL Server)

denne erklæring vil ikke virke, du skal angive tabelnavnet.

Aktiver mulighed:

SET IDENTITY_INSERT tabel { ON | FRA }

Efter at have aktiveret denne mulighed, kan du indsætte værdier i felter, der er defineret som identitet. Bemærk, at værdien skal være unik.

Det anbefales ikke at aktivere denne mulighed uden et klart behov. Det bør dog bruges i poster, hvor nogle kolonner skal ændres uden at ændre dens identitetskolonne (f.eks. hvis denne kolonne er knyttet til en anden tabel)

Indhentning af nøglen

Udviklere, der bruger en surrogatnøgle som primærnøgle, løber ofte ind i et scenarie, hvor de har brug for at få den primære nøgle (til brug i andre forespørgsler) genereret af databasen som svar på en SQL INSERT-sætning. Men de fleste systemer tillader ikke SQL INSERT-sætningen at returnere data. Mulige løsninger:

  • Brug en databasespecifik lagret procedure , der genererer en surrogatnøgle, udfører en INSERT-operation og returnerer den genererede nøgle. I Microsoft SQL Server returneres nøglen f.eks. af specialfunktionen SCOPE_IDENTITY() og i SQLite af funktionen last_insert_rowid().
  • Brug en databasespecifik SELECT -handling på en midlertidig tabel, der indeholder den sidste tilføjede række (eller rækker). DB2 implementerer denne funktion som følger:
VÆLG * FRA SLUTTABEL ( INDSÆT I telefonbogsværdier ( 'Peter Doe' , ' 555-2323 ' ) ) SOM t DB2 til z/OS implementerer denne funktion som følger: VÆLG EMPNO , HIRETYPE , HIREDATE FRA FINAL TABLE ( INDSÆT I EMPSAMP ( NAVN , LØN , DEPTNO , NIVEAU ) VÆRDI ( ' Mary Smith ' , 35000. 00 , 11 , ' Associate ' ) );
  • Ved at bruge en SELECT-sætning efter en INSERT-sætning, med en speciel funktion, der i en given database returnerer den genererede primærnøgle for den sidste tilføjede række.
  • Ved at bruge den unikke kombination af felter, der var en del af den originale SQL INSERT-sætning i efterfølgende kald til SELECT-sætningen .
  • Brug GUID'en i en SQL INSERT-sætning, få resultatet gennem en SELECT-sætning .
  • Ved at bruge MySQL mysql_insert_id() PHP -funktionen efter INSERT-sætningen.
  • ved at bruge INSERT efterfulgt af SELECT LAST_INSERT_ID() for MySQL .
  • Brug af INSERT-sætningen med en OUTPUT-sætning (Transact-SQL) siden Microsoft SQL Server 2005 .
DECLARE @ table TABEL ( [ id ] [ smallint ] IDENTITET ( 1 , 1 ) IKKE NULL , [ navn ] [ nchar ]( 50 ) NULL ); INSERT INTO @ table OUTPUT INSERTED . id VALUES ( 'Peter Doe' );
  • Brug af INSERT-sætningen med RETURNING-modifikatoren for PostgreSQL (fra version 8.2) og Firebird (fra version 2.0 ). Den returnerede liste er identisk med resultatet af SELECT-sætningen.
INSERT INTO phone_book VALUES ( 'Peter Doe' , '555-2323' ) RETURNERING phone_book_id
  • Brug af INSERT-sætningen med RETURNING-modifikatoren for Oracle . Den samme syntaks bruges i Firebird til procedurer, triggere og udførelsesblokke.
INSERT INTO phone_book VALUES ( 'Peter Doe' , '555-2323' ) RETURNING phone_book_id INTO v_pb_id
  • IDENTITY()-funktionen i H2 returnerer den sidst tilføjede (nøgle?)
VÆLG IDENTITET ();

Se også