Při testování se cizí klíče na mém počítači nevytvářejí pomocí této syntaxe:
CREATE TABLE bugs (
...
reported_by VARCHAR(100) REFERENCES accounts(account_name),
...
) ENGINE = INNODB;
Ale jsou, když použiji tento příkaz create:
CREATE TABLE bugs (
...
reported_by VARCHAR(100),
...
FOREIGN KEY (reported_by) REFERENCES accounts(account_name)
) ENGINE = INNODB;
Snadný způsob, jak zjistit, zda v tabulce existují cizí klíče, je:
show create table bugs_products
Nebo se můžete zeptat na informační schéma:
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'
Také zkontrolujte, zda používáte úložiště InnoDB. Motor MyISAM nepodporuje cizí klíče. Motor najdete takto:
select table_schema, table_name, engine
from information_schema.TABLES
where table_name = 'bugs'
Pokud se pokusíte vytvořit cizí klíč v tabulce MyISAM, tiše zahodí reference a bude předstírat úspěch.