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

事务实现: 有两种方式

  • 手动实现: 用户自定义事务区间, 自己对事务进行整体把握, 自己对事务进行最终处理(通过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事务操作原理与用法详解相关推荐

  1. MySQL事务及隔离级别详解

    MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...

  2. mysql中 where in 用法详解

    https://blog.csdn.net/haibo0668/article/details/52584307 sssss mysql中 where in 用法详解 我是高手高手高高手 2016-0 ...

  3. mysql increment_mysql中auto_increment用法详解

    在mysql中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,也就是会自动自增一个ID了,如现在是1下次会自动是2了,就这么简单,下面来看mysql中auto_increme ...

  4. 同一个事务里面对同一条数据做2次修改_[玩转MySQL之九]MySQL事务ACID[2-1]ACID详解...

    一. 引言 做数据库相关工作的同学都知道事务,就是一个操作序列 ,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位, ACID又是事务的四大特性. 那么就会有如下疑问: ACID具体代表什 ...

  5. MySQL中Case When用法详解

    最近,在学习Hive基础知识时,遇到了遇到了Case When Else End语法,以前学习MySQL时忽略了这部分知识点,现总结一下相关的知识给大家.首先练习一个例子如下: 一.学生课程成绩统计 ...

  6. mysql 创建游标报错,MySQL游标概念与用法详解

    本文实例讲述了mysql游标概念与用法.分享给大家供大家参考,具体如下: 1.游标的概念(cursor) 一条sql,对应n条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行.如果开发过安卓 ...

  7. MySQL中CONCAT()函数用法详解

    需求:需要将将俩字符串拼接在一起 1.MySQL中CONCAT()函数拼接字符串 CONCAT(str,str2,str3...) 可以将两个或者多个参数拼接在一起 注意事项: ①返回结果为连接参数产 ...

  8. MySQL索引作用和用法详解

    一.引言 对于该文章,照例尽量通俗的写,并注明一些细节和可能出现问题的地方. 此外,该文章只是写了索引的创建,不代表检索(查询)的应用,检索后面会写道. 标注:红色表示十分重要,蓝色表示细节: 在阅读 ...

  9. mysql中in的用法详解

    一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...

最新文章

  1. 确保字符串的每个单词首字母都大写,其余部分小写
  2. mysql 空间 类型_MySQL空间类型测试
  3. python 操作RabbitMQ
  4. python打包成exe导入文件_【转载】将python脚本打包成exe文件
  5. 程序员风光背后:从零到BAT数据分析师靠的是什么?
  6. 用matlab分析系统工程案例,系统工程ISMmatlab代码.doc
  7. Java中TreeMap集合讲解
  8. wxParse无法解析strong标签
  9. Cordova插件之跳转第三方app
  10. 在CMD中输入adb命令,提示“'adb' 不是内部或外部命令,也不是可运行程序或批处理文件”的解决方法
  11. 使用青龙面板BP京东豆
  12. Android内存管理(9)*MAT:Heap Dump,Shallow Heap,Retained Heap,Dominating Tree,GC Roots等的含义...
  13. 路由-策略Policy(路由重分发、路由过滤、路由策略)
  14. 人工智能阿发狗技术都包含哪些内容
  15. 计算机通电后 不能正常启动,我的电脑通电后不能马上启动?为什么啊?怎么办
  16. poj 3067 树状数组
  17. Hash算法解决冲突的方法
  18. 高并发下一些常用的限流和防刷方法
  19. 【自学笔记】天地图添加标注
  20. Background背景

热门文章

  1. 忘记win7登陆密码的问题解决2种可能以及其问题的延伸
  2. java基础算法题(入门题与简单题)
  3. c mysql 包含字符串_Mysql字符串字段判断是否包含某个字符串的2种方法
  4. iframe并没有错
  5. win10安装vbox没有虚拟网卡_消失的虚拟网卡
  6. 从SDE库文件手工删除SDE图层(转载)
  7. KUBERNETES存储之PERSISTENT VOLUMES简介
  8. 一、bootstrap table 初体验
  9. 【java学习之路】(java SE篇)013.lambda表达式
  10. 【java学习之路】(java SE篇)008.集合