MySql 事务

目录

目录

什么是事务(transaction)

  • 保证成批操作要么完全执行,要么完全不执行,维护数据的完整性。也就是要么成功要么失败。
  • 事务可以是n条sql语句(n>=0)
  • 不是所有数据库引擎支持事务,InnoDB引擎支持事务处理

事务四大特性

  • 原子性(Atomic):事务的所有所有操作要么全部执行,要么全部不执行。如果中途出现错误不会停止,而是回滚到事务前的状态
  • 一致性(Consistency):如果事务执行前是一致的,那么执行后也是一致的,不能破坏关系数据的完整性以及业务逻辑上的一致性,事务按照预期实现。
  • 隔离性(Isolation):隔离性可以防止多个事务并发时导致数据的不一致
  • 持久性(Durability):事务执行成功后对数据库的修改是永久的

事务并发不进行事务隔离

  • 脏读:事务A读到未提交事务B修改的数据,如果此时事务B中途执行失败回滚,那么此时事务A读取到的就是脏数据。比如事务A对money进行修改,此时事务B读取到事务A的更新结果,但是如果后面事务A回滚,那么事务B读取到的就是脏数据了。
  • 不可重复读:同一个事务中,对同一份数据读取的结果不一致。事务A在事务B对数据更新前进行读取,然后事务B更新提交,事务A再次读取,这时候两次读取的数据不同。
  • 幻读:同一个事务中,同一个查询多次返回的结果不一样。事务B查询表的记录数,然后事务A对表插入一条记录,接着事务B再次查询发现记录数不同。

区别

  • 脏读和不可重复读:脏读是事务读取了还未提交事务的更新数据。不可重复读是同一个事务中,几次读取的数据不同。
  • 不可重复读和幻读的区别:都是在同一个事务中,前者是几次读取数据不同,后者是几次读取数据整体不同。

隔离级别

隔离级别 作用
Serializable(串行化) 避免脏读、不可重复读、幻读
Repeatable(可重复读) 避免脏读、不可重复读
Read committed(读已提交) 避免脏读
Read uncommitted(读未提交) none
  • mysql支持上面4种隔离级别,默认为可重复读

事务的使用

start transcation;
delete from user;
savepoint dele;
****
rollback dele;
commit;
  • transcation 事务开始
  • rollback 回滚到事务起点
  • savepoint 保留回滚位置
  • rollback point_name 回滚到设置的位置

使用注意点

  • 如果事务中sql正确运行,后面没有commit,结果是不会更新到数据库的,所以需要手动添加commit。
  • 如果事务中部分sql语句出现错误,那么错误语句后面不会执行。而我们可能会认为正确操作会回滚撤销,但是实际上并没有撤销正确的操作,此时如果再无错情况下进行一次commit,之前的正确操作会生效,数据库会进行更新。

我觉得分享是一种精神,分享是我的乐趣所在,不是说我觉得我讲得一定是对的,我讲得可能很多是不对的,但是我希望我讲的东西是我人生的体验和思考,是给很多人反思,也许给你一秒钟、半秒钟,哪怕说一句话有点道理,引发自己内心的感触,这就是我最大的价值。(这是我喜欢的一句话,也是我写博客的初衷)

作者:jiajun 出处: http://www.cnblogs.com/-new/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。

MySQL系列(二)---MySQL事务的更多相关文章

  1. Mysql系列二:Mysql 开发标准规范

    原文链接:http://www.cnblogs.com/liulei-LL/p/7729983.html 一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过 ...

  2. MySQL系列(二)--MySQL存储引擎

    影响数据库性能的因素: 1.硬件环境:CPU.内存.存盘IO.网卡流量等 2.存储引擎的选择 3.数据库参数配置(影响最大) 4.数据库结构设计和SQL语句 MySQL采用插件式存储引擎,可以自行选择 ...

  3. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  4. 基于【 MySql 】二 || mysql详细学习笔记

    mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...

  5. mysql系列二、mysql内部执行过程

    向MySQL发送一个请求的时候,MySQL到底做了什么 客户端发送一条查询给服务器. 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器端进行SQL解析.预 ...

  6. mysql(二)事务 & 事务的实现 & 锁

    参考文档: mvcc:https://www.cnblogs.com/chenpingzhao/p/5065316.html 事务的实现:https://www.linuxidc.com/Linux/ ...

  7. 【MySql系列】MySql踩坑系列

    问题一:远程登录报错Host '192.168.181.201' is not allowed to connect to this MySQL server 解决: 问题二:MySql access ...

  8. MySQL系列:MySQL的基本使用

    数据库的基本操作 在MySQL数据库中,对于一个MySQL示例,是可以包含多个数据库的. 在连接MySQL后,我们可以通过 show databases; 来进行查看有那么数据库.这里已经存在一些库了 ...

  9. Redis系列二之事务及消息通知

    一.事务 Redis中的事务是一组命令的集合.一个事务中的命令要么都执行,要么都不执行. 1.事务简介 事务的原理是先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令.下面看一个示 ...

  10. MySQL操作(二)MySQL配置文件

    1.正常安装之后,有安装目录,我的直接安装在默认目录下,即 C:\Program Files\MySQL\MySQL Server 5.7 目录下 而数据存储在 C:\ProgramData\MySQ ...

随机推荐

  1. 常见的Message Queue应用场景

    在最近的工作的里面有同事问到我说,为什么我们需要一个Message Queue,Message Queue可以在哪些地方用,经过一些整理,大概能找到这些点,假如你有这方面的要求,也可以考虑使用Mess ...

  2. 没有main方法真的不能执行代码了吗?

    今天看北大慕课遇到一段代码,于是下载下来跑了一下,奇葩的是,没有main方法既没报错,还出了结果. 下面贴出代码: class InitialTest { public static void mai ...

  3. eclipse下启动tomcat项目,访问tomcat默认端口显示404错误

    解决:打开eclipse的server视图,双击你配置的那个tomcat,打开编辑窗口,查看server locations,看看是否选择了第一个选项(默认是第一个选项),即use workspace ...

  4. Linux 程序,进程和线程

    进程如何使用内存. 当程序文件运行为进程时, 进程在内存中获得空间. 1) Text : 固定大小 存储指令(instruction), 说明每一步的操作. 2) Global Data : 固定大小 ...

  5. 大话Python正则表达式

    python的正则表达式模块re import re match_object=re.compile(r"") result=re.match(match_object," ...

  6. 持续集成篇-- SonarQube代码质量管理平台的安装

    视频教程:http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53 IP:192.168.4.221 环境:CentOS 6 ...

  7. thinkphp导出csv格式的表格

    <?php /** * Created by PhpStorm. * User: hanks * Date: 2016/4/20 * Time: 13:51 */ namespace Home\ ...

  8. js脚本中try与cache捕获异常处理

    <script type="text/javascript"> function add_reason(elm){ try{ var pp=$('.pp').val() ...

  9. [leetcode-516-Longest Palindromic Subsequence]

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  10. 使用python操作mysql数据库

    这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...