mysql 多条 update 语句怎么保证同时成功同时失败呢?

查看 211|回复 19
作者:nerkeler   
mysql 多条 update 语句怎么保证同时成功同时失败呢?
java 分布式 springcloud项目 数据库是mysql,我现在有一张产品库存表, 里面有多个产品,每行记录了这个产品的详情( ID 代码 名称 类型 库存量)
产品库存表 同一个产品只会存在一条记录。
产品库存表 大致结构
create table 产品库存表 (
id ..
产品代码..
产品名称..
产品类型..
库存量..
是否有效
修改时间
创建时间

现在前端页面有个操作,大致就是将这些产品 分到一个产品包里 这个产品包 就是一个选择了不同产品和其数据的产品集合
产品包分配表另建的一张表
create table 产品包分配统计表(
id
产品包名称
产品包 ID
创建时间
是否有效

产品包明细表
create table 产品包分配统计表(
id
产品名称,
产品 ID ,
产品分配数量。
产品包名称
产品包 ID
创建时间
是否有效

简而言之,就是从 创建一个产品包 包含多个产品, 自己指定分配的产品数量,
所以 我从 产品的主库存 扣除分配给产品包的产品库存的时候, 需要保证这些产品修改 同时成功和失败,这样我好控制并发。
update 产品表    set 产品库存 =   产品库存 - 分配数量 where 产品库存 > 分配数量
这是一条产品更新的 语句,我现在想让 这些选了的产品 更新操作 同时成功,或者同时不执行,
我尝试 将多个 update 放在一行执行
update 产品表  set 产品库存  = case 条件(产品类型) when  xxx  then  对应的数量  
when xxx then 对应的产品数量
...
end
when  产品库存 > case 产品类型  when  xxx  then 对应的数量
update 语句 条件不成立的时候 只会 让影响的行数 是 0 ,从而让满足条件的执行了,没满足的没执行。
各位有什么好办法吗

产品, 库存, update, SQL

goodryb   
以我不多的数据库认知, 你标题的需求应该会用到 事务
NoobNoob030   
触发关键词 事务
ysnow888   
参考菜鸟教程 https://www.runoob.com/mysql/mysql-transaction.html
cyrivlclth   
关键词,事务,隔离级别。。。
nerkeler
OP
  
@cyrivlclth msyql 隔离级别 没有权限修改, update 不满足条件的语句不会产生异常,只是 受影响的行数是 0
jowan   
突击抽查 事务的四大特性 请作答
258   
事务 or 分布式事务?
nerkeler
OP
  
不满足的 条件的 udpate 语句 受影响的行数是 0 的情况下 你们的意思会触发 事务?
jowan   
并发不大不考虑性能的话 你直接按正常逻辑写
事务里面加行锁 就行了 不用这么复杂
您需要登录后才可以回帖 登录 | 立即注册

返回顶部