Problem:
Du vill veta standardnamnen på begränsningar i en tabell i MySQL.
Exempel:
I vår databas skapar vi två tabeller, country och student , med följande begränsningar:PRIMARY KEY (kolumn-id:t i tabellerna country och student ), FOREIGN KEY (kolumnen country_id i tabellen student ), DEFAULT (kolumnnamnet i tabellen student ), UNIQUE (kolumnen name i tabellen country och kolumnen personal_number i tabellen student ), och CHECK (kolumnen 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) );
Låt oss visa hur MySQL namnger begränsningarna för dessa tabeller som standard. Använd den här frågan för att se dem:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Här är resultatet:
| TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
|---|---|---|
| land | PRIMÄRNYCKEL | PRIMÄR |
| land | UNIKT | namn |
| student | PRIMÄRNYCKEL | PRIMÄR |
| student | UNIKT | personligt_nummer |
| student | UTLANDSNYCKEL | student_ibfk_1 |
| student | KONTROLLERA | student_chk_1 |
Diskussion:
När vi skapar våra tabeller sätter vi begränsningar för vissa kolumner. Vi anger dock inte namnen för dessa begränsningar, så de namnges som standard i MySQL. I MySQL är standardtyperna för restriktioner PRIMARY KEY , FOREIGN KEY , UNIQUE och CHECK . Hur genereras standardnamnen för begränsningar?
PRIMARY KEY constraint heter helt enkelt PRIMARY , eftersom det alltid finns en primärnyckel i en tabell. Det finns två begränsningar som heter PRIMARY i resultatet ovan, men tabellerna som de tillhör är olika.
För FOREIGN KEY , namnet följer konventionen:tabellnamnet, ett understreck ('_ ’), ‘ibfk ’, ett annat understreck (‘_ ’), och ett nummer. För vårt exempel är det student_ibfk_1 i tabellen student .
Standardnamnet för en CHECK begränsning liknar den för den främmande nyckeln. Det börjar med tabellnamnet, ett understreck ('_ ’), ‘chk ’, ett annat understreck (‘_ ’), och ett nummer. För vårt exempel är det student_chk_1 i tabellen student .
Standardnamnet på en UNIQUE constraint är namnet på själva kolumnen. För vårt exempel är det personal_number i tabellen student . När det finns flera kolumner med UNIQUE begränsning, den använder namnet på den första kolumnen i definitionen av begränsningen.