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.