prog:forloeb:ex_sql_constraints
Indholdsfortegnelse
Constraints i MariaDB/MySQL
Disse øvelser dækker oprettelse, ændring og test af Constraints i MariaDB/MySQL
- Primærnøgle
- Fremmednøgle
- UNIQUE
- sammensatte nøgler
- NOT NULL
Øvelse 1: Opret en tabel med primærnøgle
Opgave:
Opret tabel Kunde med kolonner:
- KundeID (INT) som primærnøgle
- Navn (VARCHAR)
- Email (VARCHAR)
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:
- ProduktID INT AUTO_INCREMENT som PK
- Navn VARCHAR
- Pris FLOAT
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:
- OrdreID INT AUTO_INCREMENT som PK
- KundeID INT som FK til Kunde(KundeID)
- Dato DATE
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:
- OrdreID INT
- ProduktID INT
- Antal INT
- 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);
Ø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;
Øvelse 7: Tilføj fremmednøgle til eksisterende tabel
Opgave:
Antag at OrdreLinje allerede eksisterer uden FK.
- Tilføj FK OrdreID → Ordre(OrdreID)
- Tilføj FK ProduktID → Produkt(ProduktID)
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;
prog/forloeb/ex_sql_constraints.txt · Sidst ændret: af 127.0.0.1
