update xx set a+1 where a<1 在高并发的情况下 会重复写入吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了update xx set a+1 where a<1 在高并发的情况下 会重复写入吗相关的知识,希望对你有一定的参考价值。

mysql 字段a默认为0 update xx set a+1 where a<1 在高并发的情况下 会重复写入吗

参考技术A 一般是不会的,mysql有MVCC高并发机制,会对每一条操作的数据锁定。
但是我看你的需求,其实你可以把这个字段设置成自增长,那样和你的需求一样,每多一行就会+1
再看看别人怎么说的。
参考技术B set的内容应该是个
赋值表达式
,例如:set
a
=
a+1
mysql有锁的,update的时候数据会锁定,别的并发进程无法查询和修改,锁的级别可能是表、页、行,与引擎和配置有关,如myisam是表级锁。

update 表1 set 字段1=字段3 where 条件 和 update 表1 set 字段2=字段4 这两个语句能合并成一个么 不行的

update 表1 set 字段1=字段3 where 条件 和 update 表1 set 字段2=字段4 这两个语句能合并成一个么 不行的话能否通过触发器或者存储过程实现呢(具体的代码该如何写)

可以的,只要是一个表的就直接对字段与字段间加逗号,如果是几个表的话就要先sele 表1 阐明某个字段 select 表2 阐明字段 update 表1,表2 set字段1字段2的关系 where 条件 参考技术A 中间用逗号隔开试试看看。
update form1 set 字段1 = 字段3 ,字段2 = 字段4 where 条件。 你试试看。

以上是关于update xx set a+1 where a<1 在高并发的情况下 会重复写入吗的主要内容,如果未能解决你的问题,请参考以下文章

update set from where

关于update set from where

关于update set from where

基本 SQL 原子性“UPDATE ... SET .. WHERE ...”

oracle 怎么更新多个值 update A a set a.id = (select b.id from B b where a.name=b.name)

update 表1 set 字段1=字段3 where 条件 和 update 表1 set 字段2=字段4 这两个语句能合并成一个么 不行的