'Ibfk' có nghĩa là gì trong MySQL?


25

Nếu tôi tạo một ràng buộc khóa ngoại cho bảng 'ảnh' trong phpmyadmin, thì sau này tôi thấy rằng ràng buộc đó có tên là 'photos_ibfk_1', và ràng buộc tiếp theo được gọi là 'photos_ibfk_2', v.v. Từ đó tôi đã thu thập được [tablename] _ibfk_constraint quy ước cho các ràng buộc DB trong MySQL. Điều này có đúng không? IBFK có nghĩa là gì?


5
ibfk = ib ( I nnoD B ) fk ( f oreign k ey) ... khóa ngoại của innodb
WebGuy

Câu trả lời:


24

innodb khóa ngoại. Đó chỉ là quy ước đặt tên ngắn tay. Bạn có thể gọi nó là asdfqwerty và tên vẫn hoạt động.


7

Mặc dù tên khóa ngoại có thể là bất cứ thứ gì, nhưng thực sự đó là một cách thực hành tốt để tuân theo quy ước đặt tên bảng lên hàng đầu.

Lý do quan trọng nhất cho điều này là các tên khóa ngoại phải là duy nhất trong cơ sở dữ liệu (trái với tên chỉ mục, chỉ phải là duy nhất trong mỗi bảng). Vì vậy, bằng cách tuân theo quy ước này, các tên khóa ngoại chỉ phải là duy nhất trong mỗi bảng.

Cá nhân, tôi sử dụng quy ước [table_name]_fk_[field_name].

Để đặt tên cho khóa ngoại của bạn, bạn sẽ phải đánh vần rõ ràng ràng buộc trên bảng, thay vì chỉ khóa ngoại.

Phương pháp đơn giản (đặt tên tự động, sẽ cho kết quả [table_name]_ibfk_[index]):

ALTER TABLE `[table_name]`
  ADD FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

Phương pháp rõ ràng (sẽ dẫn đến [table_name]_fk_[field_name]):

ALTER TABLE `[table_name]`
  ADD CONSTRAINT `[table_name]_fk_[field_name]`
    FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

1
Tên hạn chế không phải là duy nhất trên toàn cầu trên toàn bộ máy chủ - chỉ duy nhất cho cơ sở dữ liệu. Bạn có thể sử dụng lại tên ràng buộc giống nhau trên hai cơ sở dữ liệu khác nhau trên cùng một máy chủ.
Brandon

@Brandon: Bắt tốt! Tôi sẽ chỉnh sửa. 👍
Marco Roy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.