1.出现问题
在做数据库开发的时候,经常会遇到这样的一种情景:
当一条数据不存在的时候,插入这条数据,如果这条数据的主键已经在数据库中存在,那么更新这条数据。
你们一般怎么做呢?先根据主键查询数据,然后判断是否存在数据,如果存在数据,则update字段,否则insert数据。
这样做的弊端就是需要两次连接数据库服务器,然后利用高级语言来判断是否存在的逻辑。
问题:高并发的情况下数据会出问题,不能保证原子性
2.解决办法
例如数据表sys_user的表结构如下所示:
insert into sys_user(user_id, user_name, user_password) values ('3', '1', '3')
ON DUPLICATE KEYUPDATE user_id='3', user_name = '3', user_password = '2' ;
ON DUPLICATE KEY UPDATE(当出现DUPLICATE KEY主键重复错误的时候触发Update操作,当然要求就是表在设计的时候一定要有主键primary key)