mysql中,索引,主键,唯一索引,联合索引的区别
2015-08-17 20:15
591 查看
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。
主键分为复合主键和联合主键
复合主键就是指你表的主键含有一个以上的字段组成 。
例如;
create table test
(
name varchar(19),
id number,
value varchar(10),
primary key (id,name)
)
上面的id和name字段组合起来就是你test表的复合主键 (若其一为单索引字段时,左边的id才会有索引)
它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性
一般情况下,主键的字段长度和字段数目要越少越好
联合主键,顾名思义就是多个主键联合形成一个主键组合,体现在联合。
(主键原则上是唯一的,别被唯一值所困扰。)
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
简单的例子
主键A跟主键B组成联合主键
主键A跟主键B的数据可以完全相同(困扰吧,没关系),联合就在于主键A跟主键B形成的联合主键是唯一的。
下例主键A数据是1,主键B数据也是1,联合主键其实是11,这个11是唯一值,绝对不充许再出现11这个唯一值。(这就是多对多关系)
主键A数据 主键B数据
1 1
2 2
3 3
主键A与主键B的联合主键值最多也就是
11
12
13
21
22
23
31
32
33
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。
主键分为复合主键和联合主键
复合主键就是指你表的主键含有一个以上的字段组成 。
例如;
create table test
(
name varchar(19),
id number,
value varchar(10),
primary key (id,name)
)
上面的id和name字段组合起来就是你test表的复合主键 (若其一为单索引字段时,左边的id才会有索引)
它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性
一般情况下,主键的字段长度和字段数目要越少越好
联合主键,顾名思义就是多个主键联合形成一个主键组合,体现在联合。
(主键原则上是唯一的,别被唯一值所困扰。)
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
简单的例子
主键A跟主键B组成联合主键
主键A跟主键B的数据可以完全相同(困扰吧,没关系),联合就在于主键A跟主键B形成的联合主键是唯一的。
下例主键A数据是1,主键B数据也是1,联合主键其实是11,这个11是唯一值,绝对不充许再出现11这个唯一值。(这就是多对多关系)
主键A数据 主键B数据
1 1
2 2
3 3
主键A与主键B的联合主键值最多也就是
11
12
13
21
22
23
31
32
33
相关文章推荐
- MySQL日志总结
- MySQL 调优/优化的 100 个建议
- 8 个不得不说的 MySQL 陷阱
- MySQL索引类型以及创建
- mysql修改用户密码
- mysql进程SHOW PROCESSLIST
- mysql日志详细解析
- mysql 主主互备快速配置(备忘留存)
- Mysql 11配置项
- mysql重启
- 基于MySQL Workbench的SQL开发
- mysql 触发器更新自己表|单表操作
- mysql数据库忘记root密码
- 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
- mysql数据库root用户密码忘记进行修改的办法
- 根据已有MySQL数据库库反向生成实体类
- mysql数据库存储过程学习
- mysql 第一个sql优化
- Server 层及整个MySQL体系图
- mysql 体系结构