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.