mysql 的事务

£可爱£侵袭症+ 提交于 2020-01-28 21:04:19

mysql 的事务管理

一、事务的基础介绍

  • 概念:

    事务Transactions:一组原子性的SQL语句,或一个独立工作单元

  • 事务日志:记录事务信息,实现undo,redo等故障恢复功能

  • 事务的ACID特性

    • A:atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部 失败后回滚

    • C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性 状态

    • I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务 所见;隔离有多种隔离级别,实现并发

    • D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中

二、事务的管理

  • 启动事务:

    • BEGIN
    • BEGIN WORK
    • START TRANSACTION
  • 结束事务:

    • COMMIT:提交
    • ROLLBACK: 回滚

    注意:只有事务型存储引擎中的DML语句方能支持此类操作

  • 自动提交:set autocommit={1|0} 默认为1,为0时设为非自动提交 建议:显式请求和提交事务,而不要使用“自动提交”功能

  • 事务支持保存点:savepoint 类似快照的作用,但是事务一提交就失效了

    • 设置事务保存点 SAVEPOINT identifier

    • MariaDB [hellodb]> savepoint  b5;
      Query OK, 0 rows affected (0.00 sec)
      
    • 回滚到事务保存点 ROLLBACK [WORK] TO [SAVEPOINT] identifier

      MariaDB [hellodb]> rollback to a6;
      Query OK, 0 rows affected (0.00 sec)
      
    • 释放事务保存点 RELEASE SAVEPOINT identifier

      ariaDB [hellodb]> savepoint a5;
      Query OK, 0 rows affected (0.00 sec)
      
      MariaDB [hellodb]> release savepoint a5;
      Query OK, 0 rows affected (0.00 sec)
      
      MariaDB [hellodb]> rollback to a5;
      ERROR 1305 (42000): SAVEPOINT a5 does not exist
      
      

三、事务的隔离级别

  • 事务级别的分类(针对2个及以上事务而言)

    mark

    说明:小明和小红在A 时刻打开事务后,小明在B时刻提交了事务,又重新打开了事务;但是小红在B时刻并没有提交事务,一直处于一个事务中;小红在T1和T2不同的时间段读数据

    事务隔离级别:从上至下更加严格

    • READ UNCOMMITTED 可读取到未提交数据,产生脏读,例图:小红在T1 时间段读到了未提交的数据

    • READ COMMITTED 可读取到提交数据,但未提交数据不可读,产 生不可重复读,即可读取到多个提交数据,导致每次读取数据不一致 ;例图:小红发现在t1时刻和t2读到的数据不一样

    • REPEATABLE READ 可重复读,多次读取数据都一致,产生幻读,即 读取过程中,即使有其它提交的事务修改数据,仍只能读取到未修改 前的旧数据。此为MySQL默认设置。小红认为在T1和T2时读取的数据是一样的,但是实际上T2时间段数据已经发生了更改,T2时间段读的数据都是虚假的

    • SERIALIZABILE 可串行化,未提交的读事务阻塞修改事务,或者未 提交的修改事务阻塞读事务。导致并发性能差 例图:小明和小红开启的事务不能在同一时间发生,不是平行的,必须按顺序来

四、事务 隔离级别的设置

  • 服务器变量tx_isolation指定,

默认为REPEATABLE-READ,可在GLOBAL和 SESSION级进行设置

SET tx_isolation=’’
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE

  • 服务器选项中指定
    vim /etc/my.cnf

    [mysqld] 
    transaction-isolation=SERIALIZABLE
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!