事务执行了,数据却没有变化?

场景:

页面上有保存、提交两个操作

保存的逻辑:查询当前数据,如果之前保存过,则更新

提交的逻辑: 查询当前数据,更新数据状态,记录日志

现象:

提交操作执行之后,数据状态没有更新,但是日志记录成功了

原因:

通过查询请求日志发现,人员在很短的时间内同时操作了保存和提交操作,mysql隔离级别(RR)每个操作都有事务控制,RR隔离级别下,查询的数据为快照,当提交的操作先执行完,但是保存是的快照是提交操作执行之前的快照,当保存操作事务提交之后,将提交的变更覆盖,导致了数据状态没变,但是日志却记录成功。更新语句为动态生成sql,全字段更新

解决:

前端页面增加防重,在操作保存时,禁止操作提交

后端尽量避免全字段更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transactional控制事务是一种用于确保数据库操作的一致性和完整性的机制。它基于ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。 1. 原子性(Atomicity):事务是一个不可分割的操作单元,要么全部执行成功,要么全部回滚到初始状态。如果事务中的任何一个操作失败,整个事务将被回滚,数据库状态将回到事务开始之前的状态。 2. 一致性(Consistency):事务执行前后,数据库必须保持一致性状态。这意味着事务必须满足预定义的约束和规则,以确保数据的完整性。 3. 隔离性(Isolation):事务执行应该与其他并发事务相互隔离,以防止数据争用和冲突。并发事务之间应该相互独立,每个事务应该感知不到其他事务的存在。 4. 持久性(Durability):一旦事务提交成功,其结果应该永久保存在数据库中,并且对于任何系统故障或崩溃都是可恢复的。即使在系统故障后重新启动,数据库也应该能够恢复到事务提交后的状态。 为了实现事务的原子性、一致性、隔离性和持久性,数据库管理系统使用了以下技术和机制: 1. 事务日志(Transaction Log):记录事务的操作和状态变化,以便在系统故障后进行恢复。 2. 锁机制(Locking):通过对数据进行加锁和解锁来控制并发事务的访问和修改。锁可以防止多个事务同时对同一数据进行修改,从而保证数据的一致性和隔离性。 3. 并发控制(Concurrency Control):使用各种算法和技术来管理并发事务执行顺序和访问权限,以避免数据争用和冲突。 4. 回滚日志(Undo Log):记录事务的操作,以便在事务回滚时撤销已经执行的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值