2009-12-12 5 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) 
); 

si je décris execute 'bugs_products' i get:mysql innodb: Le tableau ne montre pas les références des colonnes, que leur montre-t-il?

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

comment puis-je obtenir aussi des informations sur les références?

Répondre

5

Lors du test, les clés étrangères ne sont pas créés sur ma machine en utilisant cette syntaxe:

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

Mais ils sont quand j'utilise cette create:

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

Un moyen facile de voir si clés étrangères existent sur une table est:

show create table bugs_products 

Ou vous pouvez interroger le schéma d'information:

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' 

Vérifiez également que vous utilisez le moteur de stockage InnoDB. Le moteur MyISAM ne prend pas en charge les clés étrangères. Vous pouvez trouver le moteur comme:

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

Si vous essayez de créer une clé étrangère sur une table MyISAM, elle silencieusement jeter les références et faire semblant de réussir.

+0

afficher montrer créer créer un tableau ne pas afficher les références. – ufk

+0

@ufk: Vérifiez si vous utilisez le moteur de stockage MyISAM; il ne prend pas en charge les clés étrangères – Andomar

+0

innodb est activé. (Je n'ai pas l'option skip-innodb activée et j'ai plusieurs directives de configuration innodb) – ufk

Questions connexes