mysql唯一索引和联合索引
2016-09-23 00:00
316 查看
摘要: mysql唯一索引和联合索引
唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。
在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的。A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.
项目中需要用到联合唯一索引:
例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定:
例如:user表中有userID,userName两个字段,如果不希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引:
alter table user add nuique index(user_id,user_name);
例如:
alter table user_daily_money_info add unique index agd(user_account_id,game_id,daily_date);
alter table user_daily_money_info add unique key agdkey(user_account_id,game_id,daily_date);
这样如果向表中添加相同记录的时候,会返回一下错误信息:
2还有一种情况就是,我们需要为以前的表 创建这个索引,有可能以前的数据中存在重复的记录 那怎么办呢?
alter ignore table user add unique index(user_id,user_name);它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化.
查询时使用联合索引的一个字段,如果这个字段在联合索引中所有字段的第一个,那就会用到索引,否则就无法使用到索引。
例如联合索引 IDX(字段A,字段B,字段C,字段D),当仅使用字段A查询时,索引IDX就会使用到;如果仅使用字段B或字段C或字段D查询,则索引IDX都不会用到。
这个规则在oracle和mysql数据库中均成立。
唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。
在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的。A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.
项目中需要用到联合唯一索引:
例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定:
例如:user表中有userID,userName两个字段,如果不希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引:
alter table user add nuique index(user_id,user_name);
例如:
alter table user_daily_money_info add unique index agd(user_account_id,game_id,daily_date);
alter table user_daily_money_info add unique key agdkey(user_account_id,game_id,daily_date);
这样如果向表中添加相同记录的时候,会返回一下错误信息:
2还有一种情况就是,我们需要为以前的表 创建这个索引,有可能以前的数据中存在重复的记录 那怎么办呢?
alter ignore table user add unique index(user_id,user_name);它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化.
查询时使用联合索引的一个字段,如果这个字段在联合索引中所有字段的第一个,那就会用到索引,否则就无法使用到索引。
例如联合索引 IDX(字段A,字段B,字段C,字段D),当仅使用字段A查询时,索引IDX就会使用到;如果仅使用字段B或字段C或字段D查询,则索引IDX都不会用到。
这个规则在oracle和mysql数据库中均成立。
相关文章推荐
- MySQL中的唯一索引的简单学习教程
- MySQL中的联合索引学习教程
- MySQL 联合索引与Where子句的优化 提高数据库运行效率
- MySQL批量插入遇上唯一索引避免方法
- MySQL联合索引用法示例
- 联合索引详解
- mysql 联合索引详解
- [每日一题] OCP1z0-047 :2013-07-16 主键与唯一索引.............................................................5
- SQL联合索引 与 单一列的索引
- mysql联合索引的作用域
- PHP防止表单重复提交的几种常用方法
- Oracle中主键和唯一索引的区别oracle中联合主键的作用
- mysql 联合索引设计
- SQL联合索引 与 单一列的索引
- 浅析MySQL各种索引
- 利用散列算法优化唯一索引性能(长文本字段的唯一索引优化)
- key,unique index,联合索引
- 关于脏读与唯一约束
- Oracle 索引 简介
- SqlLite3修改表,增加唯一索引