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.