INSERT INTO VALUES()-sats

Vi kom på hur man skapar tabeller, låt oss nu ta en detaljerad titt på hur man lägger till data till en tabell med hjälp av en SQL-fråga.

I själva verket är det väldigt enkelt att göra detta, men det finns flera nyanser. Det enklaste alternativet för att infoga data i en tabell kräver att du specificerar två saker:

  • kolumnnamn
  • kolumnvärden (data)

Kolumnnamn måste anges, eftersom kolumner ofta har standardvärden som inte anges när data infogas. Och vanligtvis har varje tabell minst en sådan kolumn, till exempel rad-ID.

Den allmänna formen för frågan för att infoga data i en tabell ser ut så här:

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

Om du till exempel vill infoga en ny post i användartabellen, är det så här frågan skulle se ut:

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

INSERT INTO SELECT-satsen

Ett annat vanligt scenario för att infoga data i en tabell är att ta den från en annan tabell, ett schema eller till och med ett DBMS.

För att göra detta finns det ett annat frågeformat INSERT INTO, där du istället för VALUES-delen kan ange en fråga för att välja data.

Den allmänna formen för en sådan begäran är:

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

Låt oss skriva en fråga som lägger till alla användare från personaltabellen till användartabellen:

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

Vi har olika uppgifter i personaltabellen, men från dem väljer vi bara två fält - namn och ankomsttid till företaget.

Användartabellen kräver också att du anger användarnivå - nivå. Anställda har ingen nivå i tabellen för anställda, så vi använder det faktum att användartabellen har ett standardvärde för nivåfältet. Vi anger bara inte nivån och SQL kommer att ställa in standardvärdet.

Anta att vi inte är nöjda med standardvärdet, och vi vill att nivån ska vara 99, och ersätter user.created_time med dagens datum, då kan vi skriva detta:

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

Det finns mycket mer som skulle kunna göras, men jag tror att det här får räcka för nu. Du kan läsa mer på den officiella MySQL-sidan.