1.什么是事务?

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成

2.事务的四大特性(ACID)2.1 Atomicity 原子性原子性是指事务是一个不可分割的单位,要么都发生,要么都不发生2.1.1 回滚日志

想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行回滚,而在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。

回滚日志除了能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息,它还能够在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,这也就需要回滚日志必须先于数据持久化到磁盘上,是我们需要先写日志后写数据库的主要原因。

回滚日志并不能将数据库物理的恢复到执行语句或事务之前的样子,他是逻辑日志。2.2 Consistency 一致性一致性是指应用从一个正确的状态到另外一个正确的状态。ACID就是通过AID来保证C的。如何理解正确的状态呢?正确的状态就是我们需要约定的一些约束,比如张三账户有90元,如果他买东西需要花费100元,则买完以后账户余额就是-10元,那么-10元是不是一个正确的状态呢?答案是的。这是因为我们并没有约定账户字段不能为负。

2.3 Isolation 隔离性

多个事务并行处理时,相互应该没有影响

隔离级别:

1.读未提交

2.读已提交

3.可重复读(innodb)

4.串行化

脏读:读到其他事务未提交的更新数据,

幻读:一个事务,读取两次,得到的记录条数不一致

不可重复读: 重复读取后数据不一致

2.3.1 隔离级别的实现

其实也是多线程问题。所以使用并发控制机制,限制不同事务对同一资源的读写。这里介绍三种最重要的并发控制器机制的工作原理。

1.锁

mysql提供两种锁,共享锁和互斥锁,也叫读锁和写锁

2.时间戳

使用时间戳的话,就是乐观锁的实现方式,写入数据的时候先对数据进行修改,再判断时间戳是否变化过,如果没有,就更新,变了的话,就生成新的时间戳再次更新数据

3.多版本和快照隔离

通过维护多个版本的数据,数据库可以允许事务在数据被其他事务更新 时,去读取旧版本的数据。2.4 Duration 持久性持久性是指一旦事务被提交,他对数据库中数据的改变就是永久性的。

3.事务的状态:

Active:事务的初始状态,表示事务正在执行;

Partially Commited:在最后一条语句执行之后;

Failed:发现事务无法正常执行之后;

Aborted:事务被回滚并且数据库恢复到了事务进行之前的状态之后;

Commited:成功执行整个事务;

mysql数据库事务实现方式_mysql事务的实现原理相关推荐

  1. mysql 事务隔离规范_MySQL事务隔离级别以及脏读、幻读、不可重复读示例

    事务的隔离性 MySQL是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session).每个客户端都可以在自己的 ...

  2. php mysql 替换 pdo,php操作MySQL数据库之PDO方式

    这篇文章主要介绍了关于php操作MySQL数据库之PDO方式 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下基本使用 1)连接数据库$pdo = new PDO("mysql ...

  3. mysql 不同连接的事务 会嵌套_MySQL——事务

    事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致状态转换为另一种一致状态. 关键词 事务四大特性ACID MySql事务隔离级别 MVCC多版本并发控制 实 ...

  4. mysql事务实现数据更新_MySql事务select for update及数据的一致性处理讲解

    MySQL中的事务,默认是自动提交的,即autocommit = 1: 但是这样的话,在某些情形中就会出现问题:比如: 如果你想一次性插入了1000条数据,mysql会commit1000次的, 如果 ...

  5. 浅谈MySQL数据库中的锁与事务

    MySQL中的锁与锁策略 在MySQL中,为了应对并发场景下的读写,锁通常分为两类:共享锁以及排他锁.其中,共享锁允许多个连接在同一时间并发的读取相同的资源,彼此之间互不影响,所以又称为读锁.排他锁则 ...

  6. 【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念

    MySQL 数据库的命令行操作 登陆操作mysql -hlocalhost –uroot –p123456 退出操作exit 数据库操作建库:create database 库名; 卸载库:drop ...

  7. mysql 默认事务隔离级别_MySQL 事务隔离级别详解

    个人公众号『码农札记』,欢迎关注,查看更多精彩文章. 简介: MySQL的事务隔离级别一共有四个,分别是读未提交.读已提交.可重复读以及可串行化. 四个特性ACID 原子性 (Atomicity) 事 ...

  8. mysql 读未提交数据_mysql事务之未提交读(Read uncommitted)

    1,Read uncommitted定义: wiki上的定义如下: 未提交读(READ UNCOMMITTED)是最低的隔离级别.允许脏读(dirty reads),事务可以看到其他事务"尚 ...

  9. mysql如何进行视图恢复_mysql事务 视图 索引 备份和恢复

    事务 1.事务: 概念:是作为单个逻辑工作单元执行的一系列操作 多个操作作为一个整体向系统提交,要么都执行,要么都不执行 事务是一个不可分割的工作逻辑单元 默认情况下 , 每条单独的SQL语句视为一个 ...

  10. mysql行级锁作用_Mysql事务及行级锁的理解

    在最近的开发中,碰到一个需求签到,每个用户每天只能签到一次,那么怎么去判断某个用户当天是否签到呢?因为当属表设计的时候,每个用户签到一次,即向表中插入一条记录,根据记录的数量和时间来判断用户当天是否签 ...

最新文章

  1. 高性能集群软件Keepalived之基础知识篇
  2. LeetCode 02.两数相加
  3. 用java写一个单例类_Java 写一个单例模式(Singleton)出来
  4. 埋石图根点lisp代码_GPS测量作业流程.doc
  5. 巧用“搜索”解决自学编程遇到的难题
  6. 接受-拒绝采样/拒绝采样(accept-reject sampling/reject sampling)
  7. Linux Centos firewall 防火墙 开启 80 端口配置案例
  8. Crate命令行客户端Crash
  9. 随机投影森林-一种近似最近邻方法(ANN)
  10. sqlalchemy的基本操作大全
  11. oeasy教您玩转vim - 39 - # 剪切粘贴
  12. Word目录:【同一篇文档设置多个独立目录】详细过程
  13. stc12c5a60s ds1302时钟
  14. linux用户和组的权限管理
  15. 【手拉手 带你准备电赛】解答小课堂——为什么要使能时钟
  16. balsamiq mockups 3.0破解教程
  17. 区块链通证经济——资产流动性的变革
  18. [Poi2012]Rendezvous
  19. GOOGLE 人机验证(RECAPTCHA)无法显示解决方案(可解决大多数 CSP 问题)
  20. 量子计算机当游戏服务器,为何需要量子计算机

热门文章

  1. 微型计算机硬件认识和拆装,微型计算机系统硬件组成与外设认识.doc
  2. mysql 窗口函数_MySQL-窗函数
  3. Android Studio常用快捷键汇总(mac)
  4. 把数据对象转成字符串_R语言处理环境监测数据(2):时间数据处理
  5. java乐视面试题_乐视面试题 · vagabond1-1983/JavaRock Wiki · GitHub
  6. Angr安装与使用之使用篇(十)
  7. windows下使用linux terminal
  8. MapReduce编程模型简介和总结
  9. Python爬虫-什么是爬虫?
  10. 钉钉扫码登录web网站