mysql外键不起作用

时间:2012-05-31 12:25:45

标签: mysql foreign-keys explain

我有两张桌子:

CREATE TABLE IF NOT EXISTS treaties(
id INT NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
PRIMARY KEY(id)
)ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS items(
id INT NOT NULL AUTO_INCREMENT,
treaty INT NOT NULL,
item varchar(20),
PRIMARY KEY(id),
FOREIGN KEY (treaty) REFERENCES treaties(id)
      ON UPDATE RESTRICT
      ON DELETE RESTRICT
)ENGINE=InnoDB;

之后我在每个表中插入了几行,但值treaties.iditems.treaty是相同的。 我跑的时候

EXPLAIN SELECT * 
FROM `items` 
JOIN `treaties` ON `items`.`treaty` = `treaties`.`id` 
WHERE 1

我获得了:

id | select_type | table   | type | possible_keys | key | key_len | ref | rows | Extra
1  | SIMPLE      | treaties| ALL  | PRIMARY       | NULL|   NULL  | NULL|   3  |
1  | SIMPLE      | items   | ALL  | treaty        | NULL|   NULL  | NULL|   4  | Using where; Using join buffer

我想如果我在items.treatytreaties.id之间有外键,则必须使用此密钥,并且type不能为ALL。 有什么问题?

拜托,帮助我!

谢谢!

1 个答案:

答案 0 :(得分:1)

the manual中所述:

  

当MySQL使用表扫描来解析查询时,EXPLAIN的输出在类型列中显示ALL。这通常在以下条件下发生:

     

[...]

     
      
  • 该表非常小,执行表扫描比使用键查找更麻烦。这对于行少于10行且行长度较短的表来说很常见。在这种情况下不要担心。
  •