2009-12-12 64 views
1
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) 
); 

如果我执行 '描述bugs_products' 我得到:mysql innodb:描述表不显示列引用,什么显示它们?

Field  | Type | Null | Key | Default | Extra | 
+------------+---------+------+-----+---------+-------+ 
| bug_id  | int(11) | NO | PRI | NULL |  | 
| product_id | int(11) | NO | PRI | NULL |  | 
+------------+---------+------+-----+---------+-------+ 

怎么能我也得到引用的信息?

回答

5

在测试中,不使用此语法我的机器上创建的外键:

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

但他们是当我使用此create语句:

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表上创建外键,它将默默放弃引用并假装成功。

+0

show create table does not show me references。 – ufk 2009-12-12 12:15:14

+0

@ufk:检查您是否使用MyISAM存储引擎;它不支持外键 – Andomar 2009-12-12 12:18:09

+0

innodb已启用。 (我没有启用skip-innodb选项,我有几个innodb配置指令) – ufk 2009-12-12 12:23:21