zoukankan      html  css  js  c++  java
  • MySQL事务操作原理与用法详解

    事务: 有多个连续操作, 是一个整体: 要么所有的操作都成功, 要么所有的操作都失败.

    事务实现: 有两种方式

    • 手动实现: 用户自定义事务区间, 自己对事务进行整体把握, 自己对事务进行最终处理(通过SQL指令实现)
    • 自动实现: 用户不管事务处理, 直接执行SQL指令(操作), 系统自动帮助用户进行处理

    一、事务原理

    SQL指令的操作(写), 并不是直接写入到数据表: 先将操作的结果缓存起来, 到系统日志文件中, 没有同步到数据表: 然后等待所有的操作都执行完执行, 等待一条执行的指令: 选择性的将所有的结果要么都同步到数据表, 要么都清空.

    二、自动事务

    当用户执行完一个SQL操作,系统会自动将结果同步到数据表中.

    Mysql服务器认为用户的操作应该简化: 不应该每次做一个操作,还需要一个额外的操作去配合: 系统将这个额外的操作给自己做(commit操作).

    自动提交: 系统在内部通过变量进行控制

    show variables like 'autocommit';

    关闭自动提交:

    set autocommit = OFF;

    自动提交关闭之后: 系统就不会将结果自动同步到数据表

    Rollback: 回滚, 清空日志文件中的结果(没有同步)

    自动提交被关闭之后: 需要手动提交
    commit: 提交, 将日志文件中的结果同步数据表

    系统自动提交都会保留: 如果真要处理事务(多个操作连贯),会使用手动事务(SQL指令控制)

    三、手动事务

    手动事务: 当需要进行事务操作的时候, 发送指令告诉服务器,之后的所有操作不要直接自动提交, 一直等到客户端发送执行指令的时候才进行事务的提交(同步).

    1、开启事务告诉系统以后的操作不要同步到数据表

    start transaction;

    2、事务操作: 就是对SQL指令进行执行

    3、事务提交

    • 提交数据: 同步到数据表: commit
    • 回滚数据: 清空日志内容:rollback

    四、回滚点

    事务在操作过程中,也许有很多步骤: 但是当某些步骤实现之后(都正确), 后续的操作可能容易出错, 可以选择在某些成功的操作之后设置一个回滚点: 以后操作失败了,可以回到该点继续下一步.

    设置回滚点: savepoint 回滚点名字;

    回滚到回滚点: rollback to 回滚点名字;

    五、事务特性

    事务一共有四大特性: ACID

    • A: 原子性(Atomic). 事务是一个整体, 不可拆分: 要么都成功,要么都失败.
    • C: 一致性(Consistency). 在事务操作的前后,对应的数据会一次性改变
    • I: 隔离性(Isolation). 事务的操作是独立的, 不受影响.
    • D:持久性(Durability). 事务的操作,一旦提交,数据就会永久性的写入到数据表, 不能回滚

    事务一旦操作过程中,会涉及到锁机制: 一旦事务在操作的过程中,操作了某一行,那么在其他事务中,就不能对该行进行操作.

    Innodb表的锁机制默认是行锁: 但是会因为查询条件没有索引而导致行锁升级为表锁.

    六、事务条件

    事务的应用

    1、需要多个操作连贯完整(要么都成功,要么都失败)
    2、事务的引用通常都是使用手动事务

    事务的条件:要支持事务,必须使用innodb存储引擎

  • 相关阅读:
    Linux下常用压缩格式的压缩与解压方法
    FreeBSD内核编译
    How to enable a Virtualbox shared folder for Linux guest systems
    VBA删除空白行列
    freebsd 隐藏ssh版本号
    常用端口大全
    fcitx无法切换到中文(manjaro)
    关机报 at-spi-bus-launcher
    内核参数和GRUB&GRUB2
    Linux 串口调试工具汇总
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522215.html
Copyright © 2011-2022 走看看