close

Invoegen (SQL)

Ga naar navigatie Ga naar zoeken

INSERT  is een SQL-instructie waarmee u rijen aan een tabel kunt toevoegen door ze met waarden te vullen. Waarden kunnen worden ingevoegd door middel van opsomming met behulp van het woord waarden en worden opgesomd tussen haakjes, gescheiden door komma's, of door de select -instructie te gebruiken .

Gebruiksvoorbeelden

Een opsomming van waarden gebruiken, kolommen specificeren:

invoegen  in  < tabelnaam  > ( [ < Kolomnaam > , ... ]) waarden ​​( < Waarde > , ...)      

Bijvoorbeeld:

INSERT  INTO  phone_book  ( naam ,  nummer )  WAARDEN  ( 'John Doe' ,  '555-1212' );

Een opsomming van waarden gebruiken, zonder kolommen op te geven:

invoegen  in  < tabelnaam  > waarden ( < waarde > , ...)  

Bijvoorbeeld:

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

Gebruik selecteren:

invoegen  in  < tabelnaam  > selecteer < kolomnaam > , ... uit < tabelnaam > _ _      

In het laatste geval kan er meer dan één record in de tabel worden ingevoegd. Als er andere velden in de tabel zijn die moeten worden ingevuld maar niet zijn opgegeven in de insert-instructie, worden deze ingesteld op de standaardwaarde of null als er geen standaardwaarde is opgegeven.

Alternatieve syntaxis voor de INSERT-instructie

Sommige DBMS'en, zoals MySQL, hebben een alternatieve syntaxis voor de INSERT-instructie, waarin waarden worden toegewezen aan kolommen met behulp van het SET-trefwoord:

invoegen  in  < tabelnaam  > set < kolomnaam 1 > = < waarde 1 > , < kolomnaam 2 > = < waarde 2 > ... _ _ _         

Functies

Tijdens de uitvoering van de instructie kunnen fouten optreden:

  • als het veld is gemaakt met de parameter not null en er is geen standaardwaarde opgegeven (zie create ), dan zal er een fout optreden als er geen invoegbare waarde voor is. De oplossing ligt voor de hand:
    • of verwijder de niet-null-parameter
    • of geef een standaardwaarde op
    • of voeg waarde in
  • als er wordt geprobeerd in te voegen in een veld met type-identiteit (autoincrement), dan zal er ook een fout optreden. Er zijn twee manieren om het probleem op te lossen:
    • geen waarde invoegen in dit veld
    • specificeer de identity_insert on optie en voeg dan een unieke waarde in voor deze kolom

identity_insert optie (MS SQL Server)

deze instructie werkt niet, u moet de tabelnaam opgeven.

Optie inschakelen:

 SET  IDENTITY_INSERT  tabel  {  ON  |  UIT  }

Nadat u deze optie hebt ingeschakeld, kunt u waarden invoegen in velden die zijn gedefinieerd als identiteit. Houd er rekening mee dat de waarde uniek moet zijn.

Het inschakelen van deze optie zonder een duidelijke noodzaak wordt niet aanbevolen. Het moet echter worden gebruikt in records waar sommige kolommen moeten worden gewijzigd zonder de identiteitskolom te wijzigen (bijvoorbeeld als deze kolom is gekoppeld aan een andere tabel)

De sleutel verkrijgen

Ontwikkelaars die een surrogaatsleutel als primaire sleutel gebruiken, komen vaak in een scenario terecht waarin ze de primaire sleutel (voor gebruik in andere query's) moeten ophalen die door de database wordt gegenereerd als reactie op een SQL INSERT-instructie. Maar de meeste systemen staan ​​niet toe dat de SQL-instructie INSERT gegevens retourneert. Mogelijke oplossingen:

  • Gebruik een databasespecifieke opgeslagen procedure die een surrogaatsleutel genereert, een INSERT-bewerking uitvoert en de gegenereerde sleutel retourneert. In Microsoft SQL Server wordt de sleutel bijvoorbeeld geretourneerd door de speciale functie SCOPE_IDENTITY() en in SQLite door de functie last_insert_rowid().
  • Gebruik een databasespecifieke SELECT -bewerking op een tijdelijke tabel die de laatst toegevoegde rij (of rijen) bevat. DB2 implementeert deze functie als volgt:
SELECTEER  * 
UIT DE  LAATSTE  TABEL  (  INSERT  INTO  phone_book  VALUES  (  'Peter Doe' , '555-2323  ' )  ALS t  
DB2 for z/OS implementeert deze mogelijkheid als volgt:
SELECTEER  EMPNO ,  HUURTYPE ,  HUURDATUM  
UIT DE  FINALE  TABEL  ( INVOER IN EMPSAMP  ( NAAM , SALARY , AFDELING , NIVEAU ) WAARDEN ( ' Mary Smith ' , 35000. 00 , 11 , ' Associate ' ) );          
  • Door een SELECT-instructie te gebruiken na een INSERT-instructie, met een speciale functie die in een bepaalde database de gegenereerde primaire sleutel voor de laatst toegevoegde rij retourneert.
  • Door de unieke combinatie van velden die deel uitmaakten van de oorspronkelijke SQL INSERT-instructie te gebruiken in volgende aanroepen van de SELECT-instructie .
  • Gebruik de GUID in een SQL INSERT-instructie en verkrijg het resultaat via een SELECT-instructie .
  • Door de MySQL mysql_insert_id() PHP -functie te gebruiken na de INSERT-instructie.
  • met INSERT gevolgd door SELECT LAST_INSERT_ID() voor MySQL .
  • De INSERT-instructie gebruiken met een OUTPUT-clausule (Transact-SQL) sinds Microsoft SQL Server 2005 .
DECLARE  @ table  TABLE  ( 
	[ id ]  [ smallint ]  IDENTITY ( 1 , 1 )  NOT  NULL , 
	[ name ]  [ nchar ] ( 50 )  NULL );
 
INSERT  INTO  @ table 
    OUTPUT  INSERTED . ID - 
WAARDEN  ( 'Peter Doe' );
  • De INSERT-instructie gebruiken met de RETURNING-modifier voor PostgreSQL (vanaf versie 8.2) en Firebird (vanaf versie 2.0 ). De geretourneerde lijst is identiek aan het resultaat van de SELECT-instructie.
INSERT  INTO  phone_book  VALUES  (  'Peter Doe' , '555-2323'  ) 
RETURNING  phone_book_id
  • De instructie INSERT gebruiken met de RETURNING-modifier voor Oracle . Dezelfde syntaxis wordt in Firebird gebruikt voor procedures, triggers en uitvoeringsblokken.
INSERT  INTO  phone_book  VALUES  (  'Peter Doe' , '555-2323'  ) 
TERUGZENDING  phone_book_id  IN  v_pb_id
  • De functie IDENTITY() in H2 retourneert de laatst toegevoegde (sleutel?)
SELECTEER  IDENTITEIT ();

Zie ook