我知道如何在下面的代码中使用 INDEX。而且我知道如何使用外键和主键。
CREATE TABLE tasks (
task_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
parent_id INT UNSIGNED NOT NULL DEFAULT 0,
task VARCHAR(100) NOT NULL,
date_added TIMESTAMP NOT NULL,
date_completed TIMESTAMP,
PRIMARY KEY (task_id),
INDEX parent (parent_id),
....
但是我找到了一个使用 KEY 而不是 INDEX 的代码,如下所示。
...
KEY order_date (order_date)
...
我在官方 MySQL 页面上找不到任何解释。谁能告诉我KEY和INDEX有什么区别?
我看到的唯一区别是,当我使用 KEY ...
时,我需要重复这个词,例如
KEY order_date (order_date)
。
没有区别。它们是同义词。
从 the CREATE TABLE
manual entry:
KEY 通常是 INDEX 的同义词。当在列定义中给出键属性 PRIMARY KEY 时,也可以仅将其指定为 KEY。这是为了与其他数据库系统兼容而实现的。
这是关于“差异”的nice description:
“MySQL 要求每个 Key 也都被索引,这是 MySQL 特定的实现细节,以提高性能。”
键是在表中扮演非常特定角色的特殊字段,键的类型决定了它在表中的用途。
索引是 RDBMS(数据库管理系统)为改进数据处理而提供的一种结构。索引与逻辑数据库结构无关。
所以...
键是用于识别表中记录的逻辑结构,索引是用于优化数据处理的物理结构。
资料来源:为凡人设计的数据库
作者:迈克尔·埃尔南德斯
它在“创建表”文档中被称为 INDEX
的同义词:MySQL 5.5 Reference Manual :: 13 SQL Statement Syntax :: 13.1 Data Definition Statements :: 13.1.17 CREATE TABLE Syntax
@Nos 已经引用了该部分并链接了 5.1 的帮助。
与 PRIMARY KEY
为您创建主键和索引一样,KEY
仅创建索引。
键是我们在其上构建索引的一组列或表达式。
虽然索引是存储在数据库中的结构,但键是严格的逻辑概念。索引帮助我们快速访问记录,而键只是唯一地标识记录。每个表都必须有一个键,但索引不是强制性的。
检查 https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721
INDEX keyname (column_name)
创建表时,它会显示KEY keyname (column_name)
。它是同义词的事实完美地解释了它。PRIMARY KEY
时,也可以仅指定为KEY
。”这是什么意思?