Insert (SQL)

INSERT er et SQL-uttrykk som legger til rader i en tabell i en relasjonell database. En INSERT-setning kan kun sette inn data i én tabell.

Syntaks
INSERT-spørringer består av spesifikasjonene INSERT INTO og VALUES. INSERT INTO bestemmer hvilken tabell og hvilke kolonner verdiene skal settes inn i, og VALUES spesifiserer verdiene som skal settes inn.

For å sette inn verdier i alle kolonnene, benyttes en slik spørring:
INSERT INTO tabell
VALUES
	(
		"Verdi 1 i rad 1",
		"Verdi 2 i rad 1",
		"Verdi 3 i rad 1"
	),
	(
		"Verdi 1 i rad 2",
		"Verdi 2 i rad 2",
		"Verdi 3 i rad 2"
	),
	(
		"Verdi 1 i rad 3",
		"Verdi 2 i rad 3",
		"Verdi 3 i rad 3"
	)

For å sette inn verdier i noen av kolonnene, benyttes en slik spørring:
INSERT INTO tabell (
	kolonne1,
	kolonne3
)
VALUES
	(
		"Verdi 1 i rad 1",
		"Verdi 3 i rad 1"
	),
	(
		"Verdi 1 i rad 2",
		"Verdi 3 i rad 2"
	),
	(
		"Verdi 1 i rad 3",
		"Verdi 3 i rad 3"
	)

Antallet kolonner og verdier må være det samme. Hvis en kolonne ikke er spesifisert, vil en forhåndsdefinert verdi for kolonnen bli benyttet. Verdiene spesifisert av INSERT-utsagnet må tilfredsstille alle begrensningene for tabellen, for eksempel primærnøkler eller NOT NULL-begrensninger. Hvis en syntaksfeil oppstår, eller noen av begrensningene er brutt, vil ikke den nye raden legges til i tabellen og en feilmelding vil bli returnert.

En INSERT-spørring kan også brukes til å hente ut data fra andre tabeller, endre det hvis ønskelig, og sette det inn i en ny tabell. Dette kan gjøres ved hjelp av en enkelt spørring som ikke involverer noen mellomprosessering i klientapplikasjonen. En nøstet SELECT-spørring brukes i stedet for VALUES. Den nøstede spørringen kan inneholde JOIN, funksjonskall, og kan referere til den samme tabellen som data skal settes inn i.
INSERT INTO tabell2
SELECT *
FROM tabell1
WHERE kolonne IN ("Verdi1", "Verdi2")
SELECT-uttrykket produserer en midlertidig tabell, og skjemaet til den midlertidige tabellen må være likt skjemaet i tabellen som skal motta data.

Eksempel
Tabellen telefonbok ser slik ut:

Denne spørringen blir sendt:
INSERT INTO telefonbok (
	fornavn,
	etternavn,
	telefonnummer
)
VALUES
	(
		"Jens",
		"Jensen",
		11223344
	),
	(
		"Kari",
		"Nordmann",
		99887766
	)
Tabellen ser da slik ut:

SQL