INSERT INTO VALUES()-setning

Vi fant ut hvordan du oppretter tabeller, la oss nå ta en detaljert titt på hvordan du legger til data i en tabell ved hjelp av en SQL-spørring.

Faktisk er det veldig enkelt å gjøre dette, men det er flere nyanser. Det enkleste alternativet for å sette inn data i en tabell krever at du spesifiserer to ting:

  • kolonnenavn
  • kolonneverdier (data)

Kolonnenavn må spesifiseres, siden kolonner ofte har standardverdier som ikke spesifiseres når du setter inn data. Og vanligvis har hver tabell minst én slik kolonne, for eksempel rad-ID.

Den generelle formen for spørringen for å sette inn data i en tabell ser slik ut:

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

Hvis du for eksempel vil sette inn en ny post i brukertabellen, er det slik spørringen vil se ut:

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

INSERT INTO SELECT-setning

Et annet vanlig scenario for å sette inn data i en tabell er å ta det fra en annen tabell, skjema eller til og med en DBMS.

For å gjøre dette er det et annet INSERT INTO-spørringsformat, der du, i stedet for VALUES-delen, kan spesifisere en spørring for å velge data.

Den generelle formen for en slik forespørsel er:

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

La oss skrive en spørring som vil legge til alle brukere fra ansatttabellen til brukertabellen:

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

Vi har ulike data i ansatttabellen, men fra dem velger vi kun to felt - navn og ankomsttid til bedriften.

Brukertabellen krever også at du spesifiserer brukernivå - nivå. Ansatte har ikke et nivå i ansatttabellen, så vi bruker det faktum at brukertabellen har en standardverdi for nivåfeltet. Vi spesifiserer bare ikke nivået, og SQL vil angi standardverdien.

Anta at vi ikke er fornøyd med standardverdien, og vi vil at nivået skal være 99, og erstatte user.created_time med dagens dato, så kan vi skrive dette:

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

Det er mye mer som kan gjøres, men jeg tror dette vil være tilstrekkelig for nå. Du kan lese mer på den offisielle MySQL-siden.