Vấn đề:
Bạn muốn biết tên mặc định của các ràng buộc trong bảng trong MySQL.
Ví dụ:
Trong cơ sở dữ liệu của chúng tôi, chúng tôi tạo hai bảng, country
và student
, với các ràng buộc sau:PRIMARY KEY
(id cột trong bảng country
và student
), FOREIGN KEY
(cột country_id
trong bảng student
), DEFAULT
(tên cột trong bảng student
), UNIQUE
(cột name
trong bảng country
và cột personal_number
trong bảng student
) và CHECK
(cột age
trong bảng student
).
Giải pháp:
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) );
Hãy hiển thị cách MySQL đặt tên cho các ràng buộc của các bảng này theo mặc định. Sử dụng truy vấn này để xem chúng:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Đây là kết quả:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
country | TỪ KHÓA CHÍNH | CHÍNH |
country | DUY NHẤT | tên |
sinh viên | TỪ KHÓA CHÍNH | CHÍNH |
sinh viên | DUY NHẤT | personal_number |
sinh viên | KEY NGOẠI HỐI | student_ibfk_1 |
sinh viên | KIỂM TRA | student_chk_1 |
Thảo luận:
Khi chúng tôi tạo bảng của mình, chúng tôi đặt các ràng buộc cho một số cột. Tuy nhiên, chúng tôi không chỉ định tên cho các ràng buộc này, vì vậy chúng được đặt tên theo mặc định trong MySQL. Trong MySQL, các loại ràng buộc mặc định là PRIMARY KEY
, FOREIGN KEY
, UNIQUE
và CHECK
. Các tên mặc định được tạo cho các ràng buộc như thế nào?
Ràng buộc PRIMARY KEY constraint
được đặt tên đơn giản là PRIMARY
, vì luôn có một khóa chính trong bảng. Có hai ràng buộc có tên là PRIMARY
trong kết quả ở trên, nhưng các bảng mà chúng thuộc về khác nhau.
Đối với FOREIGN KEY
, tên tuân theo quy ước:tên bảng, một dấu gạch dưới (‘_
’),‘ ibfk
’, Một dấu gạch dưới khác (‘ _
'), Và một số. Ví dụ của chúng tôi, nó là student_ibfk_1
trong bảng student
.
Tên mặc định cho CHECK
tương tự như ràng buộc của khóa ngoại. Nó bắt đầu bằng tên bảng, một dấu gạch dưới (‘_
’),‘ chk
’, Một dấu gạch dưới khác (‘
_
'), Và một số. Ví dụ của chúng tôi, nó là student_chk_1
trong bảng student
.
Tên mặc định của UNIQUE
ràng buộc là tên của chính cột đó. Ví dụ của chúng tôi, nó là personal_number
trong bảng student
. Khi có nhiều cột với UNIQUE
ràng buộc, nó sử dụng tên của cột đầu tiên trong định nghĩa của ràng buộc.