Problem:
Chcesz poznać domyślne nazwy ograniczeń w tabeli w MySQL.
Przykład:
W naszej bazie danych tworzymy dwie tabele, country
i student
, z następującymi ograniczeniami:PRIMARY KEY constraint
(identyfikator kolumny w tabelach country
i student
), FOREIGN KEY
(kolumna country_id
w tabeli student
), DEFAULT
(nazwa kolumny w tabeli student
), UNIQUE
(kolumna name
w tabeli country
i kolumna personal_number
w tabeli student
) i CHECK
(kolumna age
w tabeli student
).
Rozwiązanie:
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) );
Pokażmy, jak MySQL domyślnie nazywa ograniczenia tych tabel. Użyj tego zapytania, aby je zobaczyć:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Oto wynik:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
kraj | KLUCZ PODSTAWOWY | PODSTAWOWA |
kraj | UNIKALNE | nazwa |
uczeń | KLUCZ PODSTAWOWY | PODSTAWOWA |
uczeń | UNIKALNE | numer_osobisty |
uczeń | KLUCZ OBCY | student_ibfk_1 |
uczeń | SPRAWDŹ | student_chk_1 |
Dyskusja:
Kiedy tworzymy nasze tabele, ustawiamy ograniczenia dla niektórych kolumn. Jednak nie określamy nazw tych ograniczeń, więc są one domyślnie nazywane w MySQL. W MySQL domyślnymi typami ograniczeń są PRIMARY KEY constraint
, FOREIGN KEY
, UNIQUE
i CHECK
. Jak generowane są domyślne nazwy dla ograniczeń?
Ograniczenie PRIMARY KEY constraint
ma po prostu nazwę PRIMARY
, ponieważ w tabeli zawsze jest jeden klucz podstawowy. Istnieją dwa ograniczenia o nazwie PRIMARY
w powyższym wyniku, ale tabele, do których należą, są różne.
Dla FOREIGN KEY
, nazwa jest zgodna z konwencją:nazwa tabeli, podkreślenie („_
”), „ibfk
”, kolejne podkreślenie („_
”) oraz liczbę. W naszym przykładzie jest to student_ibfk_1
w tabeli student
.
Domyślna nazwa dla CHECK
ograniczenie jest podobne do klucza obcego. Zaczyna się od nazwy tabeli, podkreślenia („_
”), „chk
”, kolejne podkreślenie („
_
”) oraz liczbę. W naszym przykładzie jest to student_chk_1
w tabeli student
.
Domyślna nazwa UNIQUE
ograniczenie to nazwa samej kolumny. W naszym przykładzie jest to personal_number
w tabeli student
. Gdy istnieje wiele kolumn ze znakiem UNIQUE
ograniczenie, używa nazwy pierwszej kolumny w definicji ograniczenia.