查数据库,有则更新,无则插入

if(查数据不存在)
其他线程插入该数据;
本线程又插入该数据;
这时候就有两条插入的数据;
如何解

举一个具体的例子啊
A、B、C三个人向数据库插入张三这个用户
A、B新增-----调用save(){
if(没有张三)
插入张三
}

C导入----import(){
if(没有张三)
插入张三
}

使用事务,把
if(查数据不存在)
插入该数据;

放在事务中

或者,使用主键标识数据,数据库层面不允许相同主键的数据插入

如果是单进程,可以用同步控制,这样也就解决了。

但是如果是多进程或多客户端,那么就需要数据库事务来解决了。

所以需要程序作同步处理的,你这段代码应该是原子操作的即后面的行为依赖前面的操作,将这些操作放在同步代码块中。