MySQL 事务特性ACID、四种并发问题(丢失更新、脏读、不一致读、幻读)、并发问题如何解决、事务死锁如何解决、四种隔离级别(读未提交、读以提交,重复读,序列化)

本文介绍了MySQL事务的ACID特性,包括原子性、一致性、隔离性和持久性。接着详细讨论了并发环境下可能出现的问题,如丢失更新、脏读、不可重复读和幻读,以及相应的解决策略。事务的隔离级别分为读未提交、读已提交、可重复读和序列化,不同级别能解决不同程度的并发问题。最后提到了死锁的概念,以及如何避免和处理死锁。
摘要由CSDN通过智能技术生成

Transactions

  • 事务

  • 事务代表单个工作单元的一组SQL语句,所有语句都应该成功完成,要不然都运行失败,保证原子性

  • ACID Properties

    • Atomicity 原子性
      • 每个事务都是一个工作单元,不管包含多少语句,要么全部执行,要么退回撤销
    • Consistency 一致性
      • 数据库将保持一致的状态
    • Isolation 隔离性
      • 事务之间相互隔离 , 或者同样的数据被更改时各自受到保护,不相互干扰
      • 多个事务更改同一行, 受影响的行会被锁定 , 只有一个事务能更新这个行,其他事务必须等这个事务完成才能开始
    • durability 持久性
      • 事务产生的更改是永久的,停电或系统崩溃也不会丢失更改的内容
  • 如果语句没有返回错误他就会提交, 由一个自动提交系统管控,没有错误就自动提交,可设置变量关闭自动提交

  • 先来看看官方文档

  • START TRANSACTION
        [transaction_characteristic [, transaction_characteristic] ...]
    
    transaction_characteristic: {
        WITH CONSISTENT SNAPSHOT
        -- 这只适用于innodb
        -- 不会更改当前事务隔离级别,因此只有当前隔离级别允许一致性读时,它才提供一致性快照
        -- 允许一致性读的唯一隔离级别是repeatable read
      | READ WRITE  -- 读写
      | READ ONLY 	-- 只读
    }
    
    BEGIN [WORK]
    COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
    ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
    SET autocommit = {0 | 1}
    
  • show variables like "autocommit";
    
    -- 如果想要关闭
    set @@autocommit = 0;
    
  • demo

  • START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    

Concurrency and Locking

  • 多个用户访问相同数据时,就是并发问题,一个用户修改其他用户正在检索或修改的数据时并发可能会产生问题
  • 在系统默认事务处理时, 事务对一行或多行进行数据操作在没有提交commit之前都会对这些行上锁,除非超时回滚

Concurrency Problems

  • 并发问题
Lost Updates
  • 丢失更新
  • 多个事务尝试更新相同的数据 ,并且没有上锁 最晚提交的事务会覆盖较早事务所做的更改
  • 举例
    • 事务A想更新地址信息
    • 事务B想更新积分信息
    • 因为没上锁,两个事务都可以读取客户信息
    • 两个事务获取到的信息都是(John , NY , 10)
    • 各自进行了更改
      • transaction A更新了地址信息,提交了
      • Transaction B 更新了积分信息,后于A提交了
      • Transaction B 就会
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值