一、key
CREATE TABLE `phpcolor_ad` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`type` mediumint(1) NOT NULL,
`code` text,
PRIMARY KEY (`id`),
KEY `type` (`type`)
);
最后一句的KEY `type` (`type`)是什么意思?
如果只是key的话,就是普通索引。mysql的key和index多少有点令人迷惑,单独的key和其他关键字结合的key(primary key)实际表示的意义是不同的。key是数据库的物理结构,它包含两层意义和作用。一是约束(偏向于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key、unique key、foreign key等。
1、primary key
primary key有两个作用,一是约束作用,用于规范一个存储主键和唯一性,但同时也在此key上建立了一个主键索引。
primary key约束:
- 唯一标识数据库中的每条记录
- 主键必须包含唯一的值
- 主键列不能包含null值
- 每个表有且只能有一个主键
2、unique key
unique key也有两个作用,一是约束作用,规范数据的唯一性 ,但同时也在这个key上建立了一个唯一索引。
unique key约束:
- 唯一标识数据库表中的每条记录
- 每个表可以有多个unique key约束
- unique key主要用来防止数据插入的时候重复的
3、foreign key
foreign key也有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index。
可见mysql的key是同时具有constraint和index的意义。
代码实例:
CREATE TABLE `admin_role` (
`adminSet_id` varchar(32) NOT NULL,
`roleSet_id` varchar(32) NOT NULL,
PRIMARY KEY (`adminSet_id`,`roleSet_id`),
KEY `FK9FC63FA6DAED032` (`adminSet_id`),
KEY `FK9FC63FA6C7B24C48` (`roleSet_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
主键、两个列组合在一起,是唯一的,内建唯一性索引,并且不能为NULL
两个KEY定义,相当于分别对这两列建立索引
key的用途主要是用来加快查询速度的
二、index
index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间以一个类似目录的结构存储。索引要分类的话分为前缀索引、全文本索引等。因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。
三、MySQL中Index与Key的区别
Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key),外键(Foreign Key)等,用于数据完整性检否与唯一性约束等。
而Index则处于实现层面,比如可以对表的任意列建立索引,那么当建立索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定位,从而快速检索。
至于Unique Index,则只是属于Index中的一种而已,建立了Unique Index表示此列数据不可重复,猜想MySQL对Unique Index类型的索引可以做进一步特殊优化吧。
于是乎,在设计表的时候,Key只是要处于模型层面的,而当需要进行查询优化,则对相关列建立索引即可。
另外,在MySQL中,对于一个Primary Key的列,MySQL已经自动对其建立了Unique Index,无需重复再在上面建立索引了。
搜索到的一段解释:
Note that “primary” is called PRIMARY KEY not INDEX.
KEY is something on the logical level, describes your table and database design (i.e. enforces referential integrity …)
INDEX is something on the physical level, helps improve access time for table operations.
Behind every PK there is (usually) unique index created (automatically).
四、MySQL中unique key和primary key有什么区别
- Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而Unique key对列没有此要求。
- 一个表只能有一个Primary key,但可以有多个Unique key
- Unique key主要用来防止插入重复数据
转载自:https://blog.youkuaiyun.com/nanaMasuda/article/details/52543177