背景#
标题其实是一个 sql 语句,今天遇到了这个 sql,特此记录下这个 sql 的特点,以及要注意的问题,遇到问题后记录会理解的更加深刻...
语法含义#
sql 语句字面的含义就是插入一条数据 当一个列字段等于 xx 的时候 更新某些字段
好比,商城系统中,有张订单表 order 根据订单 id 标识为 1123 的时候,更新订单的名称信息,转化为 sql 语句的后为:
insert order on order_id = 1123 update order_name = xxx
订单的 id 为唯一索引,这样插入可以避免出现,唯一索引列重复,导致订单插入失败的情况
,从而可以避免数据冲突,然后如果 on 后面的一列不是唯一索引
则在多线程的情况下如果有多个线程进行访问,就会出现重复的数据,产生并发的问题
应用场景#
如上文所说,应用的场景,主要是并发的场景下,有唯一索引的字段列,可以解决并发问题
场景比较#
分布式锁也可以解决并发问题,两者比较区别如下:
1, 分布式锁是基于 redis 实现,锁的时间,如果选择不当会影响系统的负载,而基于 mysql 就不会