INSERT INTO VALUES() instructie

We hebben ontdekt hoe we tabellen kunnen maken. Laten we nu eens kijken hoe we gegevens aan een tabel kunnen toevoegen met behulp van een SQL-query.

In feite is het heel eenvoudig om dit te doen, maar er zijn verschillende nuances. De eenvoudigste optie voor het invoegen van gegevens in een tabel vereist het specificeren van twee dingen:

  • kolom namen
  • kolomwaarden (gegevens)

Kolomnamen moeten worden opgegeven, aangezien kolommen vaak standaardwaarden hebben die niet worden opgegeven bij het invoegen van gegevens. En meestal heeft elke tabel minstens één zo'n kolom, bijvoorbeeld rij-ID.

De algemene vorm van de query voor het invoegen van gegevens in een tabel ziet er als volgt uit:

INSERT INTO table (column1, column2, column3) VALUES
    (value1, value2, value3),
    (value1, value2, value3),
    (value1, value2, value3);

Als u bijvoorbeeld een nieuw record in de gebruikerstabel wilt invoegen, ziet de query er als volgt uit:

INSERT INTO user (name, level, created_time) VALUES
	('Rabinovich', 5, ‘2022-06-06’);

INSERT INTO SELECT-instructie

Een ander veelvoorkomend scenario voor het invoegen van gegevens in een tabel is om deze uit een andere tabel, schema of zelfs een DBMS te halen.

Om dit te doen, is er een ander INSERT INTO-queryformaat, waarin u in plaats van het VALUES-gedeelte een query kunt specificeren om gegevens te selecteren.

De algemene vorm van een dergelijk verzoek is:

INSERT INTO table (column1, column2, column3)
SELECT-request;

Laten we een query schrijven die alle gebruikers van de werknemerstabel toevoegt aan de gebruikerstabel:

INSERT INTO user (name, created_time)
   SELECT employee.name, employee.join_date
   FROM employee;

We hebben verschillende gegevens in de werknemerstabel, maar daaruit selecteren we slechts twee velden: de naam en het tijdstip van aankomst bij het bedrijf.

Ook vereist de gebruikerstabel dat u het gebruikersniveau specificeert - niveau. Werknemers hebben geen niveau in de werknemerstabel, dus gebruiken we het feit dat de gebruikerstabel een standaardwaarde heeft voor het niveauveld. We specificeren alleen het niveau niet en SQL stelt de standaardwaarde in.

Stel dat we niet tevreden zijn met de standaardwaarde, en we willen dat het niveau 99 is, en vervangen user.created_time door de datum van vandaag, dan kunnen we dit schrijven:

INSERT INTO user (name, level, created_time)
   SELECT employee.name, 99, CURDATE()
   FROM employee;

Er kan nog veel meer, maar ik denk dat dit voor nu voldoende is. U kunt meer lezen op de officiële MySQL-pagina.