当前位置:C++技术网 > 资讯 > mysql数据表添加数据重复问题解决办法

mysql数据表添加数据重复问题解决办法

更新时间:2018-06-14 10:46:11浏览次数:1+次

    我们在添加数据的时候,为了保证数据的唯一性,我们通常会添加主键。然而,在mysql中,如果增加一个自动增长的列的时候,这个就必须设置为主键。而我们要确保数据唯一性的字段通常不是这个自动增长列,而是依据其他的字段的。此时在设置主键的时候就有点麻烦了。
    一开始我直接用程序来检测,那就是在插入之前先判断数据是否存在,如果存在就不再插入。这个一般情况下是可以很好的检测和防止重复插入的。因为这样可以有更好的体验,因为已经存在了我们就做一个提示,而不只是提示失败。在业务层面上我们也是需要做这样的提示的,这样我们也顺便解决了重复插入数据的问题。
    当使用量越来越大的时候,开始出现一个问题,那就是出现了重复的数据。我们不是做了检测了吗?这和检测已经没有直接关系了。检测的代码确实没有问题。问题在于并发了!!因为代码是可以重入的,也就是代码同时被执行,而且不是以原子操作形式执行的,所以两个代码同时在检测是否有数据,发现都是没有的,然后都通过了存在性的检测,都认为不存在这条数据,所以都会执行插入数据的操作。
    对于并发的解决,我们可以用排队的形式去解决,不过就是麻烦些。比如说,我们让所有的查询都进行排队,然后挨个去执行,可以避免并发的问题,性能会有所下降,但是准确安全。缺点就是,还得自己去写队列,排队等。
    其实在数据库里还有一些特性可以供我们利用,那就是unique约束!!unique唯一性约束和主键的唯一性约束就是一个作用。对于“mysql的自动增长列,必须设置为主键”的问题,我们可以使用unique来解决。unique也可以同时设置多个为一组,从而实现多组形成一个唯一性的检测。
    mysql里,unique设置在index(索引)里,所以我们需要在添加索引的时候添加一个unique约束,这样就可以达到唯一性检测的目的。

        下面来看看如何设置:

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

    

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

    

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

    

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

    

    

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