Indholdsfortegnelse

Constraints i MariaDB/MySQL

Disse øvelser dækker oprettelse, ændring og test af Constraints i MariaDB/MySQL


Øvelse 1: Opret en tabel med primærnøgle

Opgave: Opret tabel Kunde med kolonner:

  1. KundeID (INT) som primærnøgle
  2. Navn (VARCHAR)
  3. Email (VARCHAR)

Løsning

Test:

INSERT INTO Kunde (KundeID, Navn, Email) VALUES (1, 'Anna Hansen', 'anna@mail.dk');
INSERT INTO Kunde (KundeID, Navn, Email) VALUES (2, 'Peter Jensen', 'peter@mail.dk');

-- Forsøg på duplikat PK (skal fejle)
INSERT INTO Kunde (KundeID, Navn, Email) VALUES (1, 'Ole Olsen', 'ole@mail.dk');
-- Fejl: Duplicate entry '1' for key 'PRIMARY'

Øvelse 2: Tilføj UNIQUE constraint

Opgave: Sørg for, at Email er unik, så ingen to kunder kan have samme email.

Løsning 1 (ved oprettelse af ny)

Løsning 2 (til eksisterende tabel):

Test:

INSERT INTO Kunde (KundeID, Navn, Email) VALUES (3, 'Lise Hansen', 'anna@mail.dk');
-- Fejl: Duplicate entry 'anna@mail.dk' for key 'unik_email'

Øvelse 3: Opret autogenereret primærnøgle

Opgave: Opret tabel Produkt med:

  1. ProduktID INT AUTO_INCREMENT som PK
  2. Navn VARCHAR
  3. Pris FLOAT

Løsning

Test:

INSERT INTO Produkt (Navn, Pris) VALUES ('Mus', 199.95);
INSERT INTO Produkt (Navn, Pris) VALUES ('Tastatur', 349.50);

SELECT * FROM Produkt;
-- ProduktID | Navn       | Pris
-- 1         | Mus        | 199.95
-- 2         | Tastatur   | 349.50

Øvelse 4: Opret fremmednøgle

Opgave: Opret tabel Ordre med:

  1. OrdreID INT AUTO_INCREMENT som PK
  2. KundeID INT som FK til Kunde(KundeID)
  3. Dato DATE

Løsning

Test:

-- Korrekt indsættelse
INSERT INTO Ordre (KundeID, Dato) VALUES (1, '2026-01-25');

-- Forkert indsættelse (ikke eksisterende KundeID)
INSERT INTO Ordre (KundeID, Dato) VALUES (99, '2026-01-25');
-- Fejl: Cannot add or update a child row: a foreign key constraint fails

Øvelse 5: Opret sammensat primærnøgle

Opgave: Opret tabel OrdreLinje med:

  1. OrdreID INT
  2. ProduktID INT
  3. Antal INT
  4. Primærnøgle: kombination af OrdreID + ProduktID

Test:

-- Indsæt en ordrelinje (skal lykkes)
INSERT INTO OrdreLinje (OrdreID, ProduktID, Antal) VALUES (101, 1, 2);

-- Forsøg at indsætte samme kombination igen (skal fejle)
INSERT INTO OrdreLinje (OrdreID, ProduktID, Antal) VALUES (101, 1, 5);

-- Indsæt samme ProduktID med en anden OrdreID (skal lykkes)
INSERT INTO OrdreLinje (OrdreID, ProduktID, Antal) VALUES (102, 1, 3);

Løsning/Hint


Øvelse 6: Ændre primærnøgle

Opgave: I tabellen Kunde skal du ændre primærnøgle fra KundeID til Email (for eksperiment).

Test:

-- Indsæt kunde med unik Email (skal lykkes)
INSERT INTO Kunde (KundeID, Navn, Email) VALUES (10, 'Mette Larsen', 'mette@mail.dk');

-- Indsæt kunde med eksisterende Email (skal fejle)
INSERT INTO Kunde (KundeID, Navn, Email) VALUES (11, 'Ole Hansen', 'mette@mail.dk');

-- Kontroller primærnøglen
DESCRIBE Kunde;

Løsning/Hint


Øvelse 7: Tilføj fremmednøgle til eksisterende tabel

Opgave: Antag at OrdreLinje allerede eksisterer uden FK.

Test

-- Indsæt gyldig ordrelinje (skal lykkes)
INSERT INTO OrdreLinje (OrdreID, ProduktID, Antal) VALUES (101, 1, 2);

-- Forsøg med ikke-eksisterende OrdreID (skal fejle)
INSERT INTO OrdreLinje (OrdreID, ProduktID, Antal) VALUES (999, 1, 1);

-- Forsøg med ikke-eksisterende ProduktID (skal fejle)
INSERT INTO OrdreLinje (OrdreID, ProduktID, Antal) VALUES (101, 999, 1);

-- Tjek strukturen
SHOW CREATE TABLE OrdreLinje;

Løsning/Hint