php - mysql不使用索引如何做到不插入重复的数据?
PHP中文网
PHP中文网 2017-05-16 12:58:10
0
2
612

表中有两个字段,分别是a,b。

例如记录如下
1,2
1,3
2,3
1,3

说明:
1.其中1,3才是重复的数据。
2.表里面是允许重复数据存在。

问题:当用户选择重复的数据不添加入库,这时如果用户添加的数据如下。

2,3
1,4
1,3

只能让1,4插入,其余都不可以,怎么实现这个需求?麻烦了

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
伊谢尔伦

这个问题比较好解决哈,使用乐观锁吧,步骤如下:
1.创建(1,3)元组的的md5 hash key(hashedKey)到redis里面,第一次查询时把对应的记录放到redis里面去;
2.插入记录时,先插入新的(1,3)元组的md5 hash key到redis里面(乐观锁机制),如果不能插入,证明已经存在此key,拒绝进行此插入操作;
3.hash算法例子如下:

function goHashed($a,$b,&$hashedKey)
{
   //注意对a,b数据格式的判断和异常考虑
   const SALT = "Hello,world"
   $hashedKey = md5($a.SALT.$b.SALT)
}

===好好看了一下题主的问题,貌似还必须得用MySQL的方式解决===

如果不使用索引,本人还真没什么好办法,不过要是可以建索引的话,可以让a->b组成一个索引表的一个字段,索引类型为unique index,这样也能解决重复插入的问题。

为情所困

使用唯一约束的目的是在数据库层进行重复数据的限制.

这里如果你要放弃这个限制的话,那么我们只能通过程序的方式来避免了.

最直接的解决方案就是,在插入数据之前,我们先搜索数据,判断下这个需要考虑唯一性的字段是否已经存在即将更新进去的值.如果存在,则放弃更新,否则执行更新操作.BUT,这个还是不能很号的避免重复数据的录入,毕竟还是存在那种高并发重复数据录入的情况. 只能是说大大的降低了重复数据录入的概率.

建议,能使用唯一约束的情况,还是尽量有唯一约束保证,这毕竟是系统的最后一层保障了.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板