MySQL transaction(数据库的事务)

数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作。
要么完全执行,要么完全地不执行。

ACID
事务必须具备ACID四个特性

原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。

一致性(Consistency)
一致性是指事务必须使数据库从一个一致的状态变到另外一个一致的状态,
也就是说执行事务之前和之后的状态都必须处于一致的状态。

在事务T开始时,此时数据库有一种状态,这个状态是所有的MySQL对象处于一致的状态,例如数据库完整性约束正确,
日志状态一致等,当事务T提交后,这时数据库又有了一个新的状态,不同的数据,不同的索引,不同的日志等,
但此时,约束,数据,索引日志等MySQL各种对象还是要保持一致性。

隔离性(Isolation)

隔离性是指当多个用户并发访问数据库时,比如操作同一张表时,
数据库为每个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交了,那么对于数据库中的数据改变就是永久性的,
即便是在数据库系统遭遇到故障的情况下也不会丢失提交事务的结果。

MySQL中的事务

MySQL中的事务默认是自动提交的

可以使用 set autocommit = 0; 设置禁止自动提交

开启一个事务使用start transaction;

在一个事务中的组成单元,如果失败的话,
可以使用ROLLBACK;回滚事务
如果提交的话,使用COMMIT;

事务隔离性以及在MySQL中实践

当多个线程开启事务操作数据库中数据时,数据库系统要能进行隔离性操作,以保证各个线程获取到的数据的准确性。

如果没有隔离性,会发生的几种问题

脏读(Dirty Read)
一个事务处理过程里读取了另一个未提交的事务中的数据。

不可重复读(NonRepeatable Read)

对于数据库中的某个数据,一个事务范围内多次查询却反悔了不同的数据值,这是由于在查询的间隔期间,
另外一个事务修改并提交了该数据。

幻读(Phantom Read)
在一个事务中读取了别的事务插入的数据,导致前后不一致

如丙存款100元未提交,这时银行做了报表统计account表中所有用户的总额500元,然后丙提交了,这时银行在统计发现账户为600元了,
造成虚读同样会使银行不知所措。

不同隔离级别的问题

隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)

未提交读(Read uncommitted) 可能 可能 可能
已提交读 (Read committed) 不可能 可能 可能
可重复读 (Repeatable read) 不可能 不可能 可能
可串行化 (Serializable) 不可能 不可能 不可能

MySQL中的隔离级别设置

查看当前事务的隔离级别

SELECT @@tx_isolation;

修改事务的隔离级别

SET [global | session] TRANSACTION ISOLATION LEVEL 隔离级别的名称;

SET TX_ISOLCATION='隔离级别名称';

SET TRANSACTION ISOLATION LEVEL Read uncommitted;(设置MySQL数据库的事务隔离级别为Read uncommitted)

MySQL事务的隔离级别:Serializable | Repeatable read | Read committed | Read uncommitted

注意:

设置默认级别是指当前session的下一个事务。
设置session级别是指当前session以后的所有的事务
设置global级别是指对之后的所有的session,不包括当前session

MySQL四种事务隔离级别的小总结

http://blog.chinaunix.net/uid-14010457-id-3956842.html(mysql四种隔离级别的使用)

MySQL中的锁机制

数据库为了维护ACID,尤其是一致性和隔离性,一般使用加锁的方式。
同时由于数据路是个高并发的应用,同一时间有大量的并发访问,如果加锁过度,会极大地降低并发处理的能力。
所以对于加锁的处理,是数据库对于事务处理的精髓所在。

锁方案

一次封锁

MySQL transaction的更多相关文章

  1. mysql transaction 事务

    1.事务简介 一个"最小的"不可再分的"工作单元". 一个事务通常对应了一个完整的业务.如:银行的转账功能,a转账给b,a扣钱,b加钱. 一个事务包含一条或多条 ...

  2. C# MySql Transaction Async

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. MySQL监控模板说明-Percona MySQL Monitoring Template for Cacti

    http://blog.chinaunix.net/uid-16844903-id-3535535.html https://www.percona.com/doc/percona-monitorin ...

  4. Percona监控MySQL模板详解

    InnoDB Adaptive Hash Index 显示了"自适应哈希索引"的使用情况,哈希索引只能用来搜索等值的查询. # Hash table size 17700827, ...

  5. 数据库选型之MySQL(多线程并发)

    刘勇    Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于高频中心库 ...

  6. python操作MySQL数据库的三个模块

    python使用MySQL主要有两个模块,pymysql(MySQLdb)和SQLAchemy. pymysql(MySQLdb)为原生模块,直接执行sql语句,其中pymysql模块支持python ...

  7. MySQL 常用工具sysbench/fio/tpcc等测试

    为什么要压力测试采购新设备,评估新设备性能开发新项目,评估数据库容量新系统上线前,预估/模拟数据库负载更换数据库版本,评估性能变化 关注指标  CPU %wait,%user,%sys 内存 只内存读 ...

  8. MySQL基础、MySQL安装和MariaDB安装

    MySQL基础 目录 MySQL基础 关系型数据库介绍 数据结构模型 RDBMS专业名词 关系型数据库的常见组件 SQL语句 MySQL安装与配置 MySQL安装 MariaDB安装 关系型数据库介绍 ...

  9. zabbix使用介绍

    zabbix自定义监控项 1.创建主机组,可以根据redis.mysql.web等创建对于的主机组 2.创建主机 3.创建Screens 4.自定义监控项 zabbix_agentd.conf配置文件 ...

随机推荐

  1. 为什么要用 Node.js

    每日一篇优秀博文 2017年10月10日 周二 为什么要用 Node.js 这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上 ...

  2. 《CLR via C#》读书笔记 之 泛型

    第十二章 泛型 2014-06-15 初始泛型 12.3 泛型基础结构 12.3.1 开放类型与封闭类型 12.3.2 泛型类型和继承 12.3.3 泛型类型同一性 12.3.4 代码爆炸 12.6 ...

  3. Django基础学习之Cookie 和 Sessions 应用

    在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的 ...

  4. 【九天教您南方cass 9.1】02 从地形图上绘制纵横断面

    同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程, 测量空间的[九天教您南方cass]专栏是九天老师专门开设cass免费教学班.希望能帮助那些刚入行的同学,并祝您一臂之力. [点击索 ...

  5. Extjs4.2x与富文本框编辑器KindEditor的整合

    Extjs4本身的HtmlEditor编辑器,太鸡肋了,简单的html能够应付一下,稍加复杂的就无能为力了. 对于Extjs的HtmlEditor扩展主要有三个方向,一个是扩展其本身的htmlEdit ...

  6. LVS DR模式搭建 keepalived lvs

    LVS DR模式搭建• 三台机器 • 分发器,也叫调度器(简写为dir)172.16.161.130 • rs1 172.16.161.131 • rs2 172.16.161.132 • vip 1 ...

  7. 年关将至业内警示P2P跑路风险

    年关将近,P2P网贷行业的问题平台亦不断增多,“跑路潮”会否再现,业内人士讨论热烈. “从历年数据统计来看,问题平台接近线性向上的增长趋势,即时间越往后,问题平台占比就越高,而每逢年关,问题平台占比都 ...

  8. [React] 06 - Route: koa makes your life easier

    听说koa比express更傻瓜化,真的? Koa 框架教程 本身代码只有1000多行,所有功能都通过插件实现,很符合 Unix 哲学. 搭建简单服务器 Koa, 架设一个简单的服务器 // demo ...

  9. 【JAVA-JDT-AST】Java抽象语法树的构建、遍历及转成dot格式(附Github源码)

    Background: 最近为了重现tree-based clone detection的论文:L. Jiang, G. Misherghi, Z. Su, and S. Glondu. Deckar ...

  10. 【问题集】redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range

    redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range incrm ...