mysql transaction 事务
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 事务的更多相关文章
- mysql的事务和select...for update
一.mysql的事务mysql的事务有两种方式:1.SET AUTOCOMMIT=0;也就是关闭了自动提交,那么任何commit或rollback语句都可以触发事务提交;如果SET AUTOCOMMI ...
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- MySQL的事务
MySQL的事务 1.事务:事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行. 2.事务具备的四个特性(简称为ACID性): (1)原子性(Atomic ...
- mysql 分布式事务
php + mysql 分布式事务 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicit ...
- mysql数据库事务详细剖析
在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...
- Mysql数据库事务隔离级别
事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...
- 理解MySQL数据库事务
1. 什么是事务处理? 事务处理是一种机制,它是用来管理必须成批执行的mysql操作.来保证数据库不完整的操作结果. 2. 为什么要使用事务处理? 在使用mysql操作数据的过程中,如果只是简单的中小 ...
- 《高性能Mysql》解读---Mysql的事务和多版本并发
1.base:ACID属性,并发控制 2.MySql事务的隔离级别有哪些,含义是什么? 3.锁知多少,读锁,写锁,排他锁,共享锁,间隙锁,乐观锁,悲观锁. 4.Mysql的事务与锁有什么关联?MySq ...
- mysql之事务管理
本文内容: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: 可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不 ...
随机推荐
- Mac终端解压命令集合
tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压1 ...
- codeforces水题100道 第十题 Codeforces Round #277 (Div. 2) A. Calculating Function (math)
题目链接:www.codeforces.com/problemset/problem/486/A题意:求表达式f(n)的值.(f(n)的表述见题目)C++代码: #include <iostre ...
- bootstrapValidator插件动态添加和移除校验
bootstrapValidator对动态生成的表单进行校验,需要调用方法:addField. 方法:addField(field,option); field可以是表单的name也可以是jQue ...
- Linux平台下mysql的ODBC配置方法
在安装配置之前, 需要先大概了解一下MyODBC的架构. MyODBC体系结构建立在5个组件上,如下图所示: Driver Manager: 负责管理应用程序和驱动程序间的通信, 主要功能包括: 解析 ...
- Python学习(21):Python函数(5):变量作用域与闭包
转自 http://www.cnblogs.com/BeginMan/p/3179040.html 一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除, ...
- Writing Reentrant and Thread-Safe Code(译:编写可重入和线程安全的代码)
Writing Reentrant and Thread-Safe Code 编写可重入和线程安全的代码 (http://www.ualberta.ca/dept/chemeng/AIX-43/sha ...
- Delphi2010中DataSnap技术
文章来源: https://blog.csdn.net/xieyunc/article/details/47865227?_t_t_t=0.3049736963513836 一.为DataSnap系统 ...
- 日记整理---->2016-11-21
2016-11-21简单的总结一下学到的知识点.作为一个目标而存在的东西,总是那么美丽而优雅. 一.PE中事务的编写 getTransactionTemplate().execute(new Tran ...
- 如何防御mimikatz致敬Mimikatz攻防杂谈学习笔记
零.绪论:mimikatz简介 mimikatz是一款出色的内网渗透工具,可以抓取windows主机的明文密码.NTLMhash值或者kerberos对应的缓存凭据.mimikatz的使用在获取权限后 ...
- Web Service Client使用Microsoft WSE 2.0
我安装了WSE 2.0 SP3,Setup Type选择Runtime.如果想要让Visual Studio 2005以上版本集成WSE需稍费周折,默认集成Visual Studio 2005. 1. ...