mysql唯一索引失效原因分析
来源:互联网 发布:js文件调用java代码 编辑:程序博客网 时间:2024/05/21 18:34
在开发中遇到一个mysql唯一索引失效的问题。
问题分析如下:
在给表创建唯一索引,想要约束数据不能重复时,需要注意,如果索引中有字段为空,则该条数据对应的唯一约束失效。
比如,如下一张表:
CREATE TABLE `people` ( `user_id` varchar(10) DEFAULT NULL, `name` varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1. 索引字段只有一个,该字段为null,则唯一索引失效。 设置user_id为唯一索引:
ALTER TABLE `people`ADD UNIQUE INDEX `user_id_idx` (`user_id`) USING BTREE ;
因为设置了唯一索引,所以如果想存两条相同user_id的数据,是不能成功的。
user_id name001 张三001 李四
但是,如果user_id为null,则此唯一索引失效,表中存入多条为null的数据。
user_id name001 张三null 李四null 李四
2. 索引字段有多个,只要有一个字段为null,则对应唯一索引失效。
ALTER TABLE `people`DROP INDEX `user_id_idx` ,ADD UNIQUE INDEX `user_id_idx` (`user_id`, `name`) USING BTREE ;
那么,如果想存入两条相同的数据,是不允许的。
user_id name001 张三001 张三
但是,如果有一个字段为空,则整个唯一索引失效,表中可以存储以下数据:
user_id name001 张三001 null001 null
经验教训:在表唯一索引设计时,尽量全部采用非空字段,且不要添加多余字段。
一些为了提高查询性能的可能为空的索引字段建议去单独创建索引。
0 0
- mysql唯一索引失效原因分析
- mysql索引失效原因
- mysql索引失效原因总结
- MySQL复合唯一索引分析
- MySQL索引失效情况分析
- MySQL 索引失效问题分析
- Mysql引起索引失效的原因总结
- 索引失效原因总结
- 索引失效原因分类
- oracle索引失效原因
- 索引失效原因总结
- 索引失效原因总结
- 索引失效原因
- Mysql唯一索引 唯一约束
- 【技能库】--mysql 索引失效 force index也失效-- 原因解决方案(256)
- oracle 索引失效的原因
- oracle 索引失效的原因
- oracle 索引失效的原因
- equals 和 == 的区别
- “区块链”究竟是什么,怎么理解?
- 关于Activity的四大启动模式
- Java 内存模型及GC原理
- PAT 1021
- mysql唯一索引失效原因分析
- 测试使用
- Maven与nexus关系
- mysql数据库存储过程带预处理sql的模板
- CSS三栏式自适应
- QT 简单的写日志功能
- Python+selenium环境搭建
- Java多线程之run()与start()
- 面对需求的处理态度