परीक्षण करने पर, इस सिंटैक्स का उपयोग करके मेरी मशीन पर विदेशी कुंजियाँ नहीं बनाई जाती हैं:
CREATE TABLE bugs (
...
reported_by VARCHAR(100) REFERENCES accounts(account_name),
...
) ENGINE = INNODB;
लेकिन वे तब होते हैं जब मैं इस निर्माण कथन का उपयोग करता हूं:
CREATE TABLE bugs (
...
reported_by VARCHAR(100),
...
FOREIGN KEY (reported_by) REFERENCES accounts(account_name)
) ENGINE = INNODB;
यह देखने का एक आसान तरीका है कि टेबल पर विदेशी कुंजियाँ मौजूद हैं या नहीं:
show create table bugs_products
या आप जानकारी स्कीमा को क्वेरी कर सकते हैं:
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'
यह भी जांचें कि आप InnoDB संग्रहण इंजन का उपयोग कर रहे हैं। MyISAM इंजन विदेशी कुंजियों का समर्थन नहीं करता है। आप जैसे इंजन पा सकते हैं:
select table_schema, table_name, engine
from information_schema.TABLES
where table_name = 'bugs'
यदि आप MyISAM तालिका पर एक विदेशी कुंजी बनाने का प्रयास करते हैं, तो यह चुपचाप संदर्भों को त्याग देगी और सफल होने का दिखावा करेगी।