kap*_*pso 6 mysql sql foreign-keys
定义外键是否也定义了索引?我有mysql v5.1.46&我正在查看MySQL Administrator工具,它显示外键作为索引,所以我想确认一下?
是的,当您定义外键约束时,MySQL 5.1 会自动在引用表上创建索引。MySQL 需要在引用表和外键引用表上都有索引。
但请注意,索引仅在引用表上自动创建,而不是在被引用表上创建。MySQL 不允许您创建引用被引用表中不能使用索引的字段的外键:
CREATE TABLE orders (
id int PRIMARY KEY,
code int,
name varchar(10)
) ENGINE=INNODB;
CREATE TABLE order_details (
detail_id int PRIMARY KEY,
order_code int,
value int,
FOREIGN KEY (order_code) REFERENCES orders(code)
) ENGINE=INNODB;
ERROR 1005 (HY000): Can't create table 'test.order_details'
Run Code Online (Sandbox Code Playgroud)
这并不常见,因为您经常创建引用被引用表的主键的外键约束,并且主键会自动索引。然而,这可能值得记住。
code
在表的字段上创建索引orders
可以解决问题:
CREATE INDEX ix_orders_code ON orders(code);
Run Code Online (Sandbox Code Playgroud)