Khi kiểm tra, các khóa ngoại không được tạo trên máy của tôi bằng cú pháp sau:
CREATE TABLE bugs (
...
reported_by VARCHAR(100) REFERENCES accounts(account_name),
...
) ENGINE = INNODB;
Nhưng chúng là khi tôi sử dụng câu lệnh tạo này:
CREATE TABLE bugs (
...
reported_by VARCHAR(100),
...
FOREIGN KEY (reported_by) REFERENCES accounts(account_name)
) ENGINE = INNODB;
Một cách dễ dàng để xem liệu khóa ngoại có tồn tại trên bảng hay không là:
show create table bugs_products
Hoặc bạn có thể truy vấn lược đồ thông tin:
select
table_schema
, table_name
, column_name
, referenced_table_schema
, referenced_table_name
, referenced_column_name
from information_schema.KEY_COLUMN_USAGE
where table_name = 'bugs'
Ngoài ra, hãy kiểm tra xem bạn đang sử dụng công cụ lưu trữ InnoDB. MyISAM engine không hỗ trợ khóa ngoại. Bạn có thể tìm thấy động cơ như:
select table_schema, table_name, engine
from information_schema.TABLES
where table_name = 'bugs'
Nếu bạn cố gắng tạo một khóa ngoại trên bảng MyISAM, nó sẽ âm thầm loại bỏ các tham chiếu và giả vờ thành công.