当前位置:项目开发->项目经验 ->mysql数据表添加数据重复问题解决办法

原创版权标志mysql数据表添加数据重复问题解决办法

作者:codexia  发表时间:2018/6/14 10:46:11  阅读:
[摘要] mysql数据表添加数据重复问题,在做了重复性检测后依然会发生,是因为并发操作引起的。然而主键却不能很好的利用,那么我们只有寻求其他办法了。本文给你一个可行的办法,很好的解决了这个问题。
使用支付宝扫码领红包,余额宝付款才可以使用红包哦!不要忘记哈。每天扫一次,天天赚红包!!可以将二维码保存到手机,每天直接扫码领红包啦!!
    我们在添加数据的时候,为了保证数据的唯一性,我们通常会添加主键。然而,在mysql中,如果增加一个自动增长的列的时候,这个就必须设置为主键。而我们要确保数据唯一性的字段通常不是这个自动增长列,而是依据其他的字段的。此时在设置主键的时候就有点麻烦了。
    一开始我直接用程序来检测,那就是在插入之前先判断数据是否存在,如果存在就不再插入。这个一般情况下是可以很好的检测和防止重复插入的。因为这样可以有更好的体验,因为已经存在了我们就做一个提示,而不只是提示失败。在业务层面上我们也是需要做这样的提示的,这样我们也顺便解决了重复插入数据的问题。
    当使用量越来越大的时候,开始出现一个问题,那就是出现了重复的数据。我们不是做了检测了吗?这和检测已经没有直接关系了。检测的代码确实没有问题。问题在于并发了!!因为代码是可以重入的,也就是代码同时被执行,而且不是以原子操作形式执行的,所以两个代码同时在检测是否有数据,发现都是没有的,然后都通过了存在性的检测,都认为不存在这条数据,所以都会执行插入数据的操作。
    对于并发的解决,我们可以用排队的形式去解决,不过就是麻烦些。比如说,我们让所有的查询都进行排队,然后挨个去执行,可以避免并发的问题,性能会有所下降,但是准确安全。缺点就是,还得自己去写队列,排队等。
    其实在数据库里还有一些特性可以供我们利用,那就是unique约束!!unique唯一性约束和主键的唯一性约束就是一个作用。对于“mysql的自动增长列,必须设置为主键”的问题,我们可以使用unique来解决。unique也可以同时设置多个为一组,从而实现多组形成一个唯一性的检测。
    mysql里,unique设置在index(索引)里,所以我们需要在添加索引的时候添加一个unique约束,这样就可以达到唯一性检测的目的。

        下面来看看如何设置:

    1.打开“设计表”,再点击“索引”,见到如下界面:

    

    2.在下面的“栏位”点击一下,出现右侧的三个点按钮,点击按钮,弹出来表的字段列表,如下图所示:

    

    3.然后选择后确定,选择好索引类型为“Unique”即可。索引方法选哪个都行。名称则自己输入一个。如下图所示:

    

    4.如果你喜欢用语句来实现,下面是实现的语句,和上面操作一致,语句如下图所示:

    

    

        这样一来,就算出现了并发,因为有了unique约束,数据也无法重复了。重复的数据会提示错误。

    

微信扫码关注公众号CPP技术网,微信号cpp_coder,关注我们的公众号,阅读更多精彩内容!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!
文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)