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.