Mysql
 sql >> Database >  >> RDS >> Mysql

mysql innodb:la tabella di descrizione non mostra i riferimenti alle colonne, cosa li mostra?

Durante il test, le chiavi esterne non vengono create sulla mia macchina utilizzando questa sintassi:

CREATE TABLE bugs (
  ...
  reported_by       VARCHAR(100) REFERENCES accounts(account_name),
  ...
 ) ENGINE = INNODB;

Ma lo sono quando uso questa istruzione create:

CREATE TABLE bugs (
  ...
  reported_by       VARCHAR(100),
  ...
  FOREIGN KEY (reported_by) REFERENCES accounts(account_name)
 ) ENGINE = INNODB;

Un modo semplice per vedere se esistono chiavi esterne su una tabella è:

show create table bugs_products

Oppure puoi interrogare lo schema delle informazioni:

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'

Verifica anche di utilizzare il motore di archiviazione InnoDB. Il motore MyISAM non supporta le chiavi esterne. Puoi trovare il motore come:

select table_schema, table_name, engine
from information_schema.TABLES
where table_name = 'bugs'

Se provi a creare una chiave esterna su una tabella MyISAM, eliminerà silenziosamente i riferimenti e farà finta di avere successo.