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存储引擎
转载于:https://www.cnblogs.com/chenjiacheng/p/6522215.html
MySQL事务操作原理与用法详解相关推荐
- MySQL事务及隔离级别详解
MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...
- mysql中 where in 用法详解
https://blog.csdn.net/haibo0668/article/details/52584307 sssss mysql中 where in 用法详解 我是高手高手高高手 2016-0 ...
- mysql increment_mysql中auto_increment用法详解
在mysql中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,也就是会自动自增一个ID了,如现在是1下次会自动是2了,就这么简单,下面来看mysql中auto_increme ...
- 同一个事务里面对同一条数据做2次修改_[玩转MySQL之九]MySQL事务ACID[2-1]ACID详解...
一. 引言 做数据库相关工作的同学都知道事务,就是一个操作序列 ,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位, ACID又是事务的四大特性. 那么就会有如下疑问: ACID具体代表什 ...
- MySQL中Case When用法详解
最近,在学习Hive基础知识时,遇到了遇到了Case When Else End语法,以前学习MySQL时忽略了这部分知识点,现总结一下相关的知识给大家.首先练习一个例子如下: 一.学生课程成绩统计 ...
- mysql 创建游标报错,MySQL游标概念与用法详解
本文实例讲述了mysql游标概念与用法.分享给大家供大家参考,具体如下: 1.游标的概念(cursor) 一条sql,对应n条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行.如果开发过安卓 ...
- MySQL中CONCAT()函数用法详解
需求:需要将将俩字符串拼接在一起 1.MySQL中CONCAT()函数拼接字符串 CONCAT(str,str2,str3...) 可以将两个或者多个参数拼接在一起 注意事项: ①返回结果为连接参数产 ...
- MySQL索引作用和用法详解
一.引言 对于该文章,照例尽量通俗的写,并注明一些细节和可能出现问题的地方. 此外,该文章只是写了索引的创建,不代表检索(查询)的应用,检索后面会写道. 标注:红色表示十分重要,蓝色表示细节: 在阅读 ...
- mysql中in的用法详解
一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...
最新文章
- 确保字符串的每个单词首字母都大写,其余部分小写
- mysql 空间 类型_MySQL空间类型测试
- python 操作RabbitMQ
- python打包成exe导入文件_【转载】将python脚本打包成exe文件
- 程序员风光背后:从零到BAT数据分析师靠的是什么?
- 用matlab分析系统工程案例,系统工程ISMmatlab代码.doc
- Java中TreeMap集合讲解
- wxParse无法解析strong标签
- Cordova插件之跳转第三方app
- 在CMD中输入adb命令,提示“'adb' 不是内部或外部命令,也不是可运行程序或批处理文件”的解决方法
- 使用青龙面板BP京东豆
- Android内存管理(9)*MAT:Heap Dump,Shallow Heap,Retained Heap,Dominating Tree,GC Roots等的含义...
- 路由-策略Policy(路由重分发、路由过滤、路由策略)
- 人工智能阿发狗技术都包含哪些内容
- 计算机通电后 不能正常启动,我的电脑通电后不能马上启动?为什么啊?怎么办
- poj 3067 树状数组
- Hash算法解决冲突的方法
- 高并发下一些常用的限流和防刷方法
- 【自学笔记】天地图添加标注
- Background背景