mysql的事务运作

mysql的事务运作

早就想写了,一直忘了,其实很简单

  1. 就三条命令

    start transaction
    commit
    rollback

  2. 现在来解释下:

    start transaction;
    就是开始事务追踪的命令
    开始前一定记得写

    然后

    commit;
    这个的意思是说确认提交,执行这个命令就不能rollback了,相当于执行完毕。

    最后

    rollback;
    这个命令很简单,回滚到start transaction时候的状态

  3. 现在举例
    mysql> select * from useraccount ;
    +-----------+--------+-------------+
    | AccountID | userID | AccountName |
    +-----------+--------+-------------+
    | 1 | 2 | zhifubao |
    +-----------+--------+-------------+
    1 row in set (0.00 sec)

    mysql> start transaction;
    Query OK, 0 rows affected (0.00 sec)

    mysql> update useraccount set userID = 1;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> select * from useraccount;
    +-----------+--------+-------------+
    | AccountID | userID | AccountName |
    +-----------+--------+-------------+
    | 1 | 1 | zhifubao |
    +-----------+--------+-------------+
    1 row in set (0.00 sec)

    mysql> rollback; (这里假如不想回滚就用commit;就可以完成了)
    Query OK, 0 rows affected (0.28 sec)

    mysql> select * from useraccount;
    +-----------+--------+-------------+
    | AccountID | userID | AccountName |
    +-----------+--------+-------------+
    | 1 | 2 | zhifubao |
    +-----------+--------+-------------+
    1 row in set (0.00 sec)

### MySQL 事务处理概述 在关系型数据库管理系统中,MySQL 提供了一套完整的机制来管理事务。通过这些机制可以确保一组操作要么全部成功完成,要么完全撤销,从而保持数据的一致性和完整性。 #### 一、事务的概念及其重要性 当多个客户端并发访问同一个表格的数据时,如果没有适当的控制措施,则可能会遇到脏读、不可重复读以及幻读等问题[^3]。为了防止这些问题的发生,MySQL引入了事务这一概念。一个事务是指一系列逻辑上相互关联的操作集合;它具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),即ACID特性。 #### 二、设置与查询事务隔离级别 对于不同的应用场景来说,默认的隔离级别可能并不总是最优的选择。因此,用户可以根据实际需求调整该参数。值得注意的是,在MySQL版本8以前,可以通过特定SQL语句获取当前会话或者整个系统的默认隔离模式: ```sql SELECT @@GLOBAL.tx_isolation, @@tx_isolation; ``` 然而需要注意的是,自MySQL 8.0起,官方建议使用`transaction-isolation-level`代替上述语法,并且新的函数名分别为 `@@global.transaction_isolation` 和 `@@session.transaction_isolation` 来获得相应的信息[^2]。 #### 三、四种标准的事务隔离级别 1. **未提交读 (Read Uncommitted)** 这是最弱的一种隔离形式,允许一个事务中的更改立即对其他事务可见,即使这些更改尚未被正式确认。这可能导致各种类型的异常情况出现。 2. **已提交读 (Read Committed)** 只有当另一个事务完成了其所有的修改并进行了提交之后,本事务才能看到那些变化的结果。这种级别的优点是可以避免脏读现象,但它仍然无法阻止不可重复读取或幻影记录的存在。 3. **可重复读 (Repeatable Read)** 它是MySQL InnoDB存储引擎下的默认选项。在此状态下,只要某个事务首次检索到了某些行,则在整个生命周期内都将持续得到相同的内容,除非自己主动发起更新动作。不过这也意味着长时间运行的大规模查询有可能阻碍新数据进入系统。 4. **串行化 (Serializable)** 此为最高强度的隔离策略,强制所有操作按照顺序依次执行,不允许有任何交叉重叠的部分存在。虽然这种方法能够彻底消除一切潜在冲突的可能性,但却极大地降低了性能表现,通常只适用于极少数特殊场合下才考虑采用这种方式。 #### 四、常见的错误及应对方案 有时候开发者们会在编写程序过程中不小心触发一些意想不到的行为,下面列举了几种较为普遍的情形连同对应的修复办法: - 如果发现应用程序频繁遭遇死锁警告,应该仔细审查涉及共享资源的竞争状况,尝试优化锁定范围及时长; - 当面对长时间挂起的任务时,除了增加超时限制外还可以启用自动回滚功能以减少负面影响扩散的风险; - 对于因网络波动等原因造成的连接中断事件,应当设计合理的断线重试逻辑以便尽快恢复正常服务状态。 #### 五、总结 综上所述,掌握好MySQL里的事务处理技巧不仅有助于提高开发效率还能有效保障线上业务稳定可靠地运作下去。合理配置合适的隔离等级、谨慎对待可能出现的各种例外情形都是十分必要的技能点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值