Probleem:
U wilt de standaardnamen van beperkingen in een tabel in MySQL weten.
Voorbeeld:
In onze database maken we twee tabellen, country
en student
, met de volgende beperkingen:PRIMARY KEY
(de kolom-ID in de tabellen country
en student
), FOREIGN KEY
(de kolom country_id
in de tabel student
), DEFAULT
(de kolomnaam in de tabel student
), UNIQUE
(de kolom name
in de tabel country
en de kolom personal_number
in de tabel student
), en CHECK
(de kolom age
in de tabel student
).
Oplossing:
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) );
Laten we laten zien hoe MySQL de beperkingen van deze tabellen standaard benoemt. Gebruik deze zoekopdracht om ze te bekijken:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Hier is het resultaat:
TABLE_NAME | CONSTRRAINT_TYPE | CONSTRRAINT_NAME |
---|---|---|
land | PRIMAIRE SLEUTEL | PRIMAIR |
land | UNIEK | naam |
student | PRIMAIRE SLEUTEL | PRIMAIR |
student | UNIEK | persoonlijk_nummer |
student | BUITENLANDSE SLEUTEL | student_ibfk_1 |
student | CONTROLEER | student_chk_1 |
Discussie:
Wanneer we onze tabellen maken, stellen we beperkingen in voor sommige kolommen. We specificeren echter geen namen voor deze beperkingen, dus ze worden standaard genoemd in MySQL. In MySQL zijn de standaard typen beperkingen PRIMARY KEY
, FOREIGN KEY
, UNIQUE
, en CHECK
. Hoe worden de standaardnamen gegenereerd voor beperkingen?
De PRIMARY KEY constraint
heet gewoon PRIMARY
, omdat er altijd één primaire sleutel in een tabel is. Er zijn twee beperkingen genaamd PRIMARY
in het bovenstaande resultaat, maar de tabellen waartoe ze behoren zijn anders.
Voor FOREIGN KEY
, de naam volgt de conventie:de tabelnaam, een onderstrepingsteken ('_
’), ‘ibfk
’, nog een onderstrepingsteken (‘_
’), en een nummer. Voor ons voorbeeld is dit student_ibfk_1
in de tabel student
.
De standaardnaam voor een CHECK
beperking is vergelijkbaar met die van de externe sleutel. Het begint met de tabelnaam, een onderstrepingsteken ('_
’), ‘chk
’, nog een onderstrepingsteken (‘
_
’), en een nummer. Voor ons voorbeeld is dit student_chk_1
in de tabel student
.
De standaardnaam van een UNIQUE
beperking is de naam van de kolom zelf. Voor ons voorbeeld is dit personal_number
in de tabel student
. Als er meerdere kolommen zijn met de UNIQUE
beperking, het gebruikt de naam van de eerste kolom in de definitie van de beperking.