比如有这样的场景:
- 操作一:检查表 table 中的 id=2 记录是否存在,存在,则更新这条记录,否则插入一条记录
- 操作二:检查表 table 中的 id=2 记录是否存在,存在,则更新这条记录,否则插入一条记录
有多中这样的操作,分别被封装进不同的服务里,请问有哪些方法可以防止同时插入两(多)条呢?
开发环境:Spring boot + mybatis
自己看了下,可以用@Transactional(isolation = Isolation.Serializable)
注解;或是将 id 设置为 unique;或是用复合 sql 语句(exist 之类的),请问哪种更好,或是有没有更好的方法。
各位大神,交流的时候突然又想起一个场景:
- 操作一:检查表 table 中的 id=2 记录是否存在,存在,则直接返回id,否则插入一条记录
- 操作二:检查表 table 中的 id=2 记录是否存在,存在,则直接返回id,否则插入一条记录
有多中这样的操作,分别被封装进不同的服务里,请问有哪些方法可以防止同时插入两(多)条呢?有查询到 insert ignore
但是这个方法,如果发现已有数据,会返回0,假如操作1和操作2同时查询id=2的记录发现不存在,然后操作1插入了一条记录,并返回自增id,操作2若用insert ignore
则返回0,感觉就不对了,会造成误解,请问有没有什么好的方法呢?
隔离级别设置为可串行化很可能会影响数据库性能。
id
设为unique
。参考:insert on duplicate