mysql innodb:describe表没有显示列引用,它们显示了什么?

ufk*_*ufk 2 mysql innodb

CREATE TABLE accounts (
 account_name      VARCHAR(100) NOT NULL PRIMARY KEY
);

CREATE TABLE products (
 product_id        INTEGER NOT NULL PRIMARY KEY,
 product_name      VARCHAR(100)
);

CREATE TABLE bugs (
  bug_id            INTEGER NOT NULL PRIMARY KEY,
  bug_description   VARCHAR(100),
  bug_status        VARCHAR(20),
  reported_by       VARCHAR(100) REFERENCES accounts(account_name),
  assigned_to       VARCHAR(100) REFERENCES accounts(account_name),
  verified_by       VARCHAR(100) REFERENCES accounts(account_name)
 );

CREATE TABLE bugs_products (
  bug_id            INTEGER NOT NULL REFERENCES bugs,
  product_id        INTEGER NOT NULL REFERENCES products,
  PRIMARY KEY       (bug_id, product_id)
);
Run Code Online (Sandbox Code Playgroud)

如果我执行'describe bugs_products'我得到:

 Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| bug_id     | int(11) | NO   | PRI | NULL    |       | 
| product_id | int(11) | NO   | PRI | NULL    |       | 
+------------+---------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得参考信息?

And*_*mar 6

在测试时,使用以下语法不会在我的机器上创建外键:

CREATE TABLE bugs (
  ...
  reported_by       VARCHAR(100) REFERENCES accounts(account_name),
  ...
 ) ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个create语句时它们就是:

CREATE TABLE bugs (
  ...
  reported_by       VARCHAR(100),
  ...
  FOREIGN KEY (reported_by) REFERENCES accounts(account_name)
 ) ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)

查看表中是否存在外键的简单方法是:

show create table bugs_products
Run Code Online (Sandbox Code Playgroud)

或者您可以查询信息架构:

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'
Run Code Online (Sandbox Code Playgroud)

还要检查您是否正在使用InnoDB存储引擎.MyISAM引擎不支持外键.你可以找到像这样的引擎:

select table_schema, table_name, engine
from information_schema.TABLES
where table_name = 'bugs'
Run Code Online (Sandbox Code Playgroud)

如果您尝试在MyISAM表上创建外键,它将以静默方式丢弃引用并假装成功.