java 先查询再插入
程序员文章站
2022-05-23 10:05:48
...
在测试代码时发现一个问题:
要实现一个数据库表中user_id和手机号两个字段觉得数据的唯一性,所以我要先进行查询,如果数据存在,则不插入,数据不存在则插入数据。可是当前台打开多个页面时,同时触发这个操作之后,第一个访问来了判断没有数据便进行插入,但还没有插入完成时第二个访问也来了,此时查询还没有数据,便也插入,但这样一来就有两条重复数据了。
所以要需要控制一下这样的问题我找到一些方法:
1、 可以用sql语句进行控制,有插入的不允许有重复的值插入:
INSERT INTO marketing_vote (user_id, mobile_number, type)
SELECT '18210141111my', '18210141111', 'vote' FROM DUAL WHERE
NOT EXISTS (
SELECT
*
FROM
marketing_vote
WHERE
mobile_number = '18210141111my' and user_id='18210141111');
这样在插入的时候可以先时行判断,如果条件里的用户存在数据库表中,那么not exists里返加false,则条件不存在不会插入数据,反则会将数据插入到数据库表中。
2、 可以在表中利用唯一索引进行控制,这样不就可以插 入重复数据;
3、. 还可以在插入之前做一个删除操作,当然这种方法不是特别合理;