MySQL-26管理事务处理-必知必会

InnoDB 引擎支持事务处理

  • 什么是事务处理

    事务处理可以用来维护数据库的完整性,保证成批的MySQL操作要么全都执行,要么都不执行。事务处理是一种机制,用来成批的执行MySQL操作,以保证数据库不包含不完整的操作结果。

    • 事务transaction:指的是一组SQL语句
    • 回滚rollback:撤销指定的SQL语句的过程
    • 提交commit:将未存储的SQL语句结果写入数据库表中
    • 保留点savepoint:指事务处理中设置的临时占位符place hoder,可以对它发布回退
  • 使用ROLLBACK

    SELECT * FROM ordertotals;-- 查看这个表
    START TRANSACTION;-- 开始事务
    DELETE FROM ordertotals;-- 删除这个表中的所有行
    SELECT * FROM ordertotals;-- 查看这个表
    ROLLBACK;-- 回滚START之后的所有的语句
    SELECT * FROM ordertotals;
    

    不能回退SELECT语句因为没有意义,不能回退CREATE/DROP 操作

  • 使用COMMIT

    一般MySQL语句是直接针对数据库进行执行和编写的,是隐匿提交/提交是自动进行的。

    事务处理块,提交是不隐匿进行的,为进行明确的提交要使用COMMIT语句

    START TRANSACTION;
    DELETE FROM ordertotals WHERE order_num = 20010;
    DELETE FROM orders WHERE order_num = 20010;
    COMMIT;-- 当语句块全部不出错时才会提交
    

    在COMMIT或ROLLBACK之后,事务会自动关闭,提交方式变为隐匿提交

  • 使用保留点 SAVEPOINT

    更复杂的事务处理需要部分提交和回退,需要在事务处理块合适的位置防止占位符,回退时可以回退到某个占位符

    START TRANSACTION;
    DELETE FROM ordertotals WHERE order_num = 20010;
    SAVEPOINT deleter;-- 标识的唯一名字
    DELETE FROM orders WHERE order_num = 20010;
    ROLLBACK TO deleter;-- 指明要回退的保留点
    

    保留点可以使用多个,会在事务完成后自动释放。

  • 更改默认的提交行为

    SET autocommit = 0;-- 更改MySQL为不自动提交
    SET autocommit = 1;-- 默认自动提交、更改MySQL为自动提交
    

本文的回退和回滚都对应ROLLBACK操作,因为优快云对MySQL语句的支持不足而使用SQL的代码块内编写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值