SQL
INSERT, UPDATE og DELETE
De tre kommandoer, der ændrer data. INSERT tilføjer rækker, UPDATE ændrer eksisterende, og DELETE fjerner dem. Både UPDATE og DELETE rammer alle rækker i tabellen, hvis du glemmer WHERE, og det kan ikke fortrydes.
Forudsætter, at du har set where - filtrér rækker .
INSERT
INSERT INTO kunde (navn, email, postnr)
VALUES ('Ida Hansen', 'ida@example.dk', 2000);
Skriv altid kolonnenavnene. Formen uden dem afhænger af tabellens rækkefølge, og den ændrer sig, den dag nogen tilføjer en kolonne.
Flere rækker på én gang:
INSERT INTO produkt (navn, pris)
VALUES ('Kaffe', 89), ('Kop', 45), ('Kande', 199);
Feltet id udelader du som regel. Databasen tæller selv op. Skal du bruge det
nye id bagefter, spørger du databasen om det; hvordan afhænger af systemet.
UPDATE
UPDATE produkt
SET pris = 95
WHERE id = 3;
SET kan sætte flere kolonner adskilt af komma, og du må gerne regne på den
eksisterende værdi:
UPDATE produkt
SET pris = pris * 1.1, opdateret = GETDATE()
WHERE kategori = 'kaffe';
DELETE
DELETE FROM ordre
WHERE dato < '2020-01-01';
Har en anden tabel en fremmednøgle, der peger på rækken, afviser databasen sletningen. Det er referentiel integritet, og det er en funktion, ikke en forhindring.
Vanen, der forhindrer ulykken
Skriv altid din UPDATE eller DELETE som en SELECT først, med præcis den
samme WHERE:
-- 1: se hvad der bliver ramt
SELECT * FROM produkt WHERE kategori = 'kaffe';
-- 2: er det de rigtige rækker? Så skriv om til:
UPDATE produkt SET pris = pris * 1.1 WHERE kategori = 'kaffe';
Det tager fem sekunder og redder din database. Arbejder du direkte i produktionen
- hvilket I forhåbentlig ikke gør i projektet, så kør det også inde i en transaktion, så du kan rulle tilbage.
Sletning er ikke altid det, du vil
I et system med ordrer og kunder er det sjældent rigtigt at slette. Historikken skal typisk kunne genfindes, både af hensyn til bogføring og til rapporter. Den almindelige løsning er at markere rækken i stedet:
UPDATE kunde SET aktiv = 0 WHERE id = 12;
Så skal alle forespørgsler til gengæld huske WHERE aktiv = 1. Det er en
afvejning, og det er en god ting at kunne begrunde i rapporten.
Kort opsamling
- Skriv kolonnenavnene i
INSERT. UPDATE … SET … WHEREogDELETE FROM … WHERE.- Uden
WHERErammer de hele tabellen. - Kør altid en
SELECTmed samme betingelse først.
Læs videre
- WHERE - filtrér rækker WHERE i SQL forklaret på dansk: sammenligninger, AND og OR, LIKE, IN, BETWEEN og hvorfor NULL aldrig er lig med noget som helst.
- Transaktioner Transaktioner i SQL forklaret på dansk: commit, rollback og ACID. Hvornår du har brug for en transaktion, og hvad der sker hvis du ikke bruger en.
- Primærnøgler og fremmednøgler Primærnøgler og fremmednøgler forklaret på dansk med eksempler i SQL. Hvorfor de findes, hvordan de sættes op, og hvad referentiel integritet betyder.
Senest gennemgået .