Problém:
Chcete znát výchozí názvy omezení v tabulce v MySQL.
Příklad:
V naší databázi vytvoříme dvě tabulky, country
a student
, s následujícími omezeními:PRIMARY KEY
(ID sloupce v tabulkách country
a student
), FOREIGN KEY
(sloupec country_id
v tabulce student
), DEFAULT
(název sloupce v tabulce student
), UNIQUE
(sloupec name
v tabulce country
a sloupec personal_number
v tabulce student
) a CHECK
(sloupec age
v tabulce student
).
Řešení:
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) );
Ukážeme si, jak MySQL standardně pojmenovává omezení těchto tabulek. Chcete-li je zobrazit, použijte tento dotaz:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Zde je výsledek:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
země | PRIMÁRNÍ KLÍČ | PRIMÁRNÍ |
země | JEDINEČNÉ | jméno |
student | PRIMÁRNÍ KLÍČ | PRIMÁRNÍ |
student | JEDINEČNÉ | personal_number |
student | CIZI KLÍČ | student_ibfk_1 |
student | ZKONTROLUJTE | student_chk_1 |
Diskuse:
Když vytváříme naše tabulky, nastavujeme omezení pro některé sloupce. Názvy těchto omezení však nespecifikujeme, takže jsou v MySQL pojmenovány standardně. V MySQL jsou výchozí typy omezení PRIMARY KEY
, FOREIGN KEY
, UNIQUE
a CHECK
. Jak se generují výchozí názvy pro omezení?
PRIMARY KEY constraint
se jednoduše jmenuje PRIMARY
, protože v tabulce je vždy jeden primární klíč. Existují dvě omezení pojmenovaná PRIMARY
ve výše uvedeném výsledku, ale tabulky, ke kterým patří, jsou odlišné.
Pro FOREIGN KEY
, název se řídí konvencí:název tabulky, podtržítko (‘_
“), „ibfk
“, další podtržítko („_
“) a číslo. Pro náš příklad je to student_ibfk_1
v tabulce student
.
Výchozí název pro CHECK
omezení je podobné jako u cizího klíče. Začíná názvem tabulky, podtržítkem („_
’), „chk
“, další podtržítko („
_
“) a číslo. Pro náš příklad je to student_chk_1
v tabulce student
.
Výchozí název UNIQUE
omezení je název samotného sloupce. Pro náš příklad je to personal_number
v tabulce student
. Pokud existuje více sloupců s UNIQUE
omezení, používá název prvního sloupce v definici omezení.