Problem:
Du vil kende standardnavnene på begrænsninger i en tabel i MySQL.
Eksempel:
I vores database opretter vi to tabeller, country
og student
, med følgende begrænsninger:PRIMARY KEY
(kolonne-id'et i tabellerne country
og student
), FOREIGN KEY
(kolonnen country_id
i tabellen student
), DEFAULT
(kolonnenavnet i tabellen student
), UNIQUE
(kolonnen name
i tabellen country
og kolonnen personal_number
i tabellen student
), og CHECK
(kolonnen age
i tabellen student
).
Løsning:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) REFERENCES country(id) );
Lad os vise, hvordan MySQL navngiver disse tabellers begrænsninger som standard. Brug denne forespørgsel til at se dem:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Her er resultatet:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
land | PRIMÆR NØGLE | PRIMÆR |
land | UNIKK | navn |
elev | PRIMÆR NØGLE | PRIMÆR |
elev | UNIKK | personligt_nummer |
elev | UDLANDS NØGLE | student_ibfk_1 |
elev | TJEK | student_chk_1 |
Diskussion:
Når vi opretter vores tabeller, sætter vi begrænsninger for nogle kolonner. Vi angiver dog ikke navnene for disse begrænsninger, så de navngives som standard i MySQL. I MySQL er standard begrænsningstyperne PRIMARY KEY
, FOREIGN KEY
, UNIQUE
, og CHECK
. Hvordan genereres standardnavnene for begrænsninger?
PRIMARY KEY constraint
er blot navngivet PRIMARY
, fordi der altid er én primær nøgle i en tabel. Der er to begrænsninger med navnet PRIMARY
i resultatet ovenfor, men de tabeller, de hører til, er forskellige.
For FOREIGN KEY
, følger navnet konventionen:tabelnavnet, en understregning (‘_
’), ‘ibfk
’, en anden understregning (‘_
’), og et nummer. For vores eksempel er det student_ibfk_1
i tabellen student
.
Standardnavnet for en CHECK
begrænsning svarer til den for fremmednøglen. Det starter med tabelnavnet, en understregning ('_
’), ‘chk
’, en anden understregning (‘
_
’), og et nummer. For vores eksempel er det student_chk_1
i tabellen student
.
Standardnavnet på en UNIQUE
constraint er navnet på selve kolonnen. For vores eksempel er det personal_number
i tabellen student
. Når der er flere kolonner med UNIQUE
begrænsning, bruger den navnet på den første kolonne i definitionen af begrænsningen.