1、事务简介

  • 一个"最小的"不可再分的"工作单元"。
  • 一个事务通常对应了一个完整的业务。如:银行的转账功能,a转账给b,a扣钱,b加钱。
  • 一个事务包含一条或多条DML语句(insert,update,delete)。
  • 在一个事务中要么所有的语句都成功执行,要么都失败,即所有的DML语句都成功执行才会修改硬盘数据。

在mysql命令行模式下,事务是自动提交的,每执行一条DML语句都会开启一个事务,执行成功后立即执行commit操作。可以通过"show variables like '%commit%';"  查看事务的是否自动开启。

2、事务的四个属性

① 原子性:最小的工作单元,不可再分。事务中的所有操作必须全部成功或全部失败,成功后写入底层数据,失败后回滚rollback到事务开启的状态。

② 一致性:事务在完成时,必须使所有的数据都保持一致状态,保持数据库的完整性。

③ 隔离性:并发事务之间存在隔离,互不干扰。

④ 持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。

3、事务控制语句

  • commit     事务提交
  • rollback    事务回滚
  • begin        开启事务
  • start transaction  开启事务 同begin
  • set transaction     设置事务隔离级别,只对当前会话有效

1)事务结束标志

  事务提交或回滚,在mysql中默认开启自动提交事务,即执行一条insert,update,,delect,会自动提交事务

2)关闭自动提交事务的方式1

  手动开启一个事务

begin;
DML语句..
DML语句..
...
commit/rollback;

3)关闭自动提交事务的方式2 ,这种方式最对当前会话有效。更改后通过 "show variables like '%commit%';" 查看事务开启状态

set autocommit = off;   # 关闭自动提交事务
set autocommit = on; # 开启自动提交事务

4、事务四个隔离级别

  • read uncommitted  读未提交
  • read committed      读以提交
  • repeatable  read    可重复读
  • serializable            串行化

这四个隔离级别逐渐增高。

① read uncommitted:事务A未提交的数据,事务B也可以读取到,这种隔离级别最低。这种事务会导致"dirty read(脏读)"。因为事务A的数据还没有提交,事务B就可以读取到,那如果事务A在事务B读取后回滚了呢,就导致了事务B读取到的数据是"脏数据"。

② read committed:事务A未提交的数据,事务B读取不到,事务A提交后的数据事务B才能读取到。这个事务级别不会导致"dirty read",但会导致"不可重复读"。假设事务A需要半天,在这期间有很多的其它事务都在修改数据,那么就导致了一个问题,事务A在开启时读到的数据与半天后读到的数据差别很大,那么事务A需要在这半天内读到的数据都是一样的该怎么办,比如每个月底网络运营商系统出账的时候,那肯定得在出账期间读到的数据都必须一样才行。

③ repeatable  read:事务A提交后的数据,事务B读取不到,事务B读取的数据依旧是事务B刚开始时的数据。MySQL的事务默认是这个级别。

④ serializable:事务A在执行的时候,事务B只能等待,就是说当多个事务需要执行时,只能排队一个个的来,就是串行化的字面意思了。这种隔离级别最高,但会导致数据库的吞吐量很低一般不用。

5、实例

1)需要用到的表

CREATE TABLE `bank` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`money` int(255) NOT NULL,
PRIMARY KEY (`id`)
)

bank表

INSERT INTO `bank` VALUES (0, 'zhangsan', 1000), (0, 'lisi', 2000), (0, 'wangwu', 500), (0, 'zhaoliu', 1300);

bank表数据

2)'lisi' 给 'zhangsan' 转账 500

mysql> begin;
Query OK, 0 rows affected (0.00 sec) mysql> update bank set money=money+500 where name='zhangsan';
Query OK, 1 row affected (0.01 sec) mysql> update bank set money=money-500 where name='lisi';
Query OK, 1 row affected (0.01 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> select * from bank;
+----+----------+-------+
| id | name | money |
+----+----------+-------+
| 1 | zhangsan | 1500 |
| 2 | lisi | 1500 |
| 3 | wangwu | 500 |
| 4 | zhaoliu | 1300 |
+----+----------+-------+
4 rows in set (0.00 sec)

mysql transaction 事务的更多相关文章

  1. mysql的事务和select...for update

    一.mysql的事务mysql的事务有两种方式:1.SET AUTOCOMMIT=0;也就是关闭了自动提交,那么任何commit或rollback语句都可以触发事务提交;如果SET AUTOCOMMI ...

  2. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. MySQL的事务

    MySQL的事务 1.事务:事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行. 2.事务具备的四个特性(简称为ACID性): (1)原子性(Atomic ...

  4. mysql 分布式事务

    php + mysql 分布式事务 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicit ...

  5. mysql数据库事务详细剖析

    在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...

  6. Mysql数据库事务隔离级别

    事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...

  7. 理解MySQL数据库事务

    1. 什么是事务处理? 事务处理是一种机制,它是用来管理必须成批执行的mysql操作.来保证数据库不完整的操作结果. 2. 为什么要使用事务处理? 在使用mysql操作数据的过程中,如果只是简单的中小 ...

  8. 《高性能Mysql》解读---Mysql的事务和多版本并发

    1.base:ACID属性,并发控制 2.MySql事务的隔离级别有哪些,含义是什么? 3.锁知多少,读锁,写锁,排他锁,共享锁,间隙锁,乐观锁,悲观锁. 4.Mysql的事务与锁有什么关联?MySq ...

  9. mysql之事务管理

    本文内容: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: 可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不 ...

随机推荐

  1. 高并发应对:淘宝CDN缓存服务器部署探秘

    转自:http://server.chinabyte.com/6/12663506.shtml “好,时间到,开抢!”坐在电脑前早已等待多时的宋兰(化名)一看时间已到2011年11月11日零时,便迫不 ...

  2. mybatis 之 parameterType="java.util.List"

    <!-- 添加 --> <insert id="saveBatchMemberRoleConnRepModel" parameterType="java ...

  3. butterknife用法总结

  4. js当中null和{}区别

    {}是一个不完全空的对象,因为他的原型链上还有Object呢,而null就是完全空的对象,啥也没有,原型链也没有,所以null instanceof Object === false;[]就更不用说了 ...

  5. IDEA 单元测试 导入JUnit4到项目

    一.IDEA自带JUnit4的jar包,现在让我们来导入. Step 1. IDEA最上面一栏的菜单栏中,选File->Project Structure(从上往下第11个),弹出窗口左边有一个 ...

  6. 【面试题】源石智影科技Python工程师笔试题

    哈哈 上图

  7. 【truffle】Error: `truffle init` no longer accepts a project template name as an argument.

    下载范例工程时候.使用命令报错 truffle init webpack 错误如下: Error: `truffle init` no longer accepts a project templat ...

  8. 【Laravel5】 定制错误页面

    laravel5   所有异常错误都由类   App\Exceptions\Handler    处理,该类包含两个方法:   report   和   render . 这里我们只看 render  ...

  9. delphi 10 Seattle 第一个Android程序

    delphi 10 Seattle 第一个Android程序 1.打开Delphi RAD Studio Seattle,如下图     2.选择black application 点击OK   3. ...

  10. junit4 详解

    转:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html JUnit4概述 JUnit4是JUnit框架有史以来的最大改进, ...