MySQL 在外键处理上有一些特定的行为,关于外键和索引的关系如下:
InnoDB 存储引擎:
自动创建索引的目的:
MyISAM 存储引擎:
特殊情况:
sql
SHOW INDEX FROM 表名;
或
sql
SELECT * FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名';
-- InnoDB 会自动创建索引
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
-- MyISAM 需要手动创建索引
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
INDEX (customer_id),
FOREIGN KEY (customer_id) REFERENCES customers(id)
) ENGINE=MyISAM;
总结:在 InnoDB 中,MySQL 会自动为外键创建索引,但了解这一行为有助于更好地进行数据库设计和优化。