mysql事务

MySQL MVCC Undo log Redo log

折月煮酒 提交于 2020-01-10 05:35:55
目录 什么是MVCC? MVCC-插入 MVCC-删除 MVCC-修改 MVCC-查询 Undo log Redo log 什么是MVCC? Multi Version Concurrency Control (多版本并发控制) 并发访问(读或写)数据库时,对事务内正在处理的数据做多版本管理。以实现写操作堵塞的同时,依然可以进行读操作。 MVCC-插入 插入规则:在数据行版本号列保存当前事务ID。 MVCC-删除 删除规则:将删除版本号列更新为当前事务ID。 MVCC-修改 修改规则:现将命中的数据行copy,将原数据的删除版本号设置为当前事务ID(33)。 MVCC-查询 查询规则: 1. 查找数据行版本小于或等于当前事务版本的数据行。这样可以确保事务读取的行,要么是在事务开始之前就存在的,要么是事务自身插入或修改过的; 2. 查找删除版本号要么为NULL,要么大于当前事务版本号的数据行。这样可以确保查询出来的记录在事务开启前没有被删除。 Undo log Undo意为取消,以撤销操作为目的,返回指定某个状态的操作。 Undo log指事务开始之前,在操作任何数据之前,首先将需操作的数据备份到一个地方 (Undo Log)。 UndoLog是为了实现事务的原子性而出现的产物。 Undo Log实现了事务的原子性: 事务处理过程中如果出现了错误或者用户执行了 ROLLBACK语句

mysql 事物默认隔离模式 Read uncommitted - 脏读

孤街醉人 提交于 2020-01-10 03:36:38
1 Read uncommitted: 顾名思义,就是一个事务可以读取另一个未提交事务的数据。 事例:老板要给程序员发工资,程序员的工资是 3.6 万 / 月。但是发工资时老板不小心按错了 数字,按成 3.9 万 / 月,该钱已经打到程序员的户口,但是事务还没有提交,就在这时,程 序员去查看自己这个月的工资,发现比往常多了 3 千元,以为涨工资了非常高兴。 但是老板及时发现了不对,马上回滚差点就提交了的事务,将数字改成 3.6 万再提交。 分析:实际程序员这个月的工资还是 3.6 万,但是程序员看到的是 3.9 万。 他看到的是老板还没提交事务时的数据。这就是脏读。 解决:Read committed!读提交就能解决脏读问题 * * * 两个客户端按顺序 一起按顺序操作; 实例: 客户端 1 : ( 程序员 ) mysql : select @@transaction_isolation ; -- 查看事物默认隔离模式 set session transaction isolation level read uncommitted ; -- 设置隔离模式 start transaction ; -- 开启 1. begin ; 2. select news_num FROM lwl_category_industry WHERE industry_id = 12 打印结果: 3.6

Mysql ------ 索引+ 事务

允我心安 提交于 2020-01-09 23:54:28
文章目录 一、索引: (1)数据库索引: (2)索引的作用: (3)索引分类: (4)创建索引的原则依据: (5)创建索引的办法: 二、事务: (1)事务概念: (2)事务的四大特性: (3)事务的操作: 三、两表相连查询: 一、索引: (1)数据库索引: 1、在数据库中,索引使数据程序无须对整个表进行扫描,就可以在其中找到所需数据; 2、数据库中的索引是某个表中一列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单。 (2)索引的作用: 1、数据库能够大大加快查询速率; 2、降低数据库的 IO 成本,并且索引还可以降低数据库的排序成本; 3、通过创建唯一性索引保证数据表数据的唯一性; 4、加快表与表之间的连接; 5、分组和排序的时候,可以大大减少分组和排序时间 (3)索引分类: 1、普通索引 :最基本的索引类型,而且没有唯一性之类的限制; 2、唯一性索引 :与普通索引基本相似,区别在于,索引列的所有值都只能出现一次,即必须唯一; 3、主键 :主键是一种唯一性索引,必须指定为 “ primary key ” ; 4、全文索引 :mysql 从3.23.23版本开始支持全文索引和全文检索,在mysql 中,全文索引的索引类型为 fulltext ,全文索引可以在 varchar 或者 text 类型的列上创建; 5、单列索引与多列索引:索引可以是单列上创建的索引

Fescar分布式事务实现原理解析探秘

家住魔仙堡 提交于 2020-01-09 13:05:16
前言 fescar发布已有时日,分布式事务一直是业界备受关注的领域,fescar发布一个月左右便受到了近5000个star足以说明其热度。当然,在fescar出来之前,已经有比较成熟的分布式事务的解决方案开源了,比较典型的方案如LCN(https://github.com/codingapi/tx-lcn)的2pc型无侵入事务,目前lcn已发展到5.0,已支持和fescar事务模型类似的TCX型事务。还有如TCC型事务实现hmily(https://github.com/yu199195/hmily)、tcc-transaction(https://github.com/changmingxie/tcc-transaction)等。在微服务架构流行的当下、阿里这种开源大户背景下,fescar的发布无疑又掀起了研究分布式事务的热潮。fescar脱胎于阿里云商业分布式事务服务GTS,在线上环境提供这种公共服务其模式肯定经受了非常严苛的考验。其分布式事务模型TXC又仿于传统事务模型XA方案,主要区别在于资源管理器的定位一个在应用层一个在数据库层。博主觉得fescar的txc模型实现非常有研究的价值,所以今天我们来好好翻一翻fescar项目的代码。本文篇幅较长,浏览并理解本文大概耗时30~60分钟左右。 项目地址 fescar:https://github.com/alibaba

『浅入浅出』MySQL 和 InnoDB

﹥>﹥吖頭↗ 提交于 2020-01-09 11:41:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出。 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是 数据库 和 实例 : 数据库:物理操作文件系统或其他形式文件类型的集合; 实例:MySQL 数据库由后台线程以及一个共享内存区组成; 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍。 数据库和实例 在 MySQL 中,实例和数据库往往都是一一对应的,而我们也无法直接操作数据库,而是要通过数据库实例来操作数据库文件,可以理解为数据库实例是数据库为上层提供的一个专门用于操作的接口。 在 Unix 上,启动一个

Java - 框架之 Hibernate

删除回忆录丶 提交于 2020-01-09 04:05:34
一:hibernate.cfg.xml 配置 <!-- 1、配置数据库连接的4个参数 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 连接数据库,本地数据库可以不用设置主机和端口 --> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_01</property> <!-- jdbc:mysql://localhost:3306/数据库名 --> <!-- 用户名/密码 --> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">chaoqi</property> <!-- 是否显示sql语句 --> <property name="show_sql">true</property> <!-- 是否格式化sql语句 --> <property name="format_sql">true</property> <!-- 是否自动提交事务:针对insert有效,针对delete无效 -->

MySQL事务和事务隔离级别

走远了吗. 提交于 2020-01-09 02:41:20
1、概述 事务就是对数据库数据进行更改(包括insert、update、delete等)操作的一个执行单元,通常有一条或多条更改语句组成。在同一个事务中的更改操作要么同时成功,要么同时失败。 事务具有4个属性:原子性、一致性、隔离性、持久性。即 ACID 特性。 原子性(atomicity):同一个事务中的更改操作要么同时成功,要么同时失败。 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。 持久性(durability):指一个事务一旦提交,对数据库中数据的改变就应该是永久性的。 下面我们详细介绍一下隔离性。 2、四个隔离级别 MySQL 中有四个隔离级别: READ UNCOMMITTED 读未提交,一个事务内部可以读到其他事务未提交的更改,可能出现“脏读” READ COMMITTED 读已提交,一个事务内部可以读到其他事务已提交的更改,这个比较常用 REPEATABLE READ 可重复读,InnoDB引擎默认使用的隔离级别。一个事务内部不能读到其他事务做的任何更改,可能出现“幻读” SERIALIZABLE 串行化,不支持并发 3、修改事务隔离级别 MySQL 的 InnoDB 引擎默认使用的是

腾讯面试题及答案

ぃ、小莉子 提交于 2020-01-08 22:39:40
2、InnoDB支持的四种事务隔离级别名称是什么? 之间的区别是什么? 1、读未提交:可以读取到其它会话未提交的数据 2、读已提交:允许不可重复读,但不允许脏读。提交后其它会话可以看到提交的数据。 3、可重复读:禁止不可重复读和脏读,以及幻读(innodb独有) 4、可串行化:事务只能一个接一个执行,但不能并发执行,事务隔离级别最高。 区别: 3、聊一聊事务的特性 事务的特性:原子性:事务中的各项操作,要么全做要么全不做 一致性:事务结束后系统状态是一致的 隔离性:并发执行的事务彼此无法看到对方的中间状态 持久性:事务完成后所作的改动都会被持久化,即使发生灾难性的失败。通过日志h和同步备份可以在故障发生后重建数据。 6、谈一谈对慢查询的分析?MySQL常用的优化方法有哪些? 分析:1、是否遇到行锁,表锁 2、没有建索引或者创建了索引没有用到 3、数据库在刷新脏页 优化:1、使用正确的字段类型 2、使用连接查询来代替子查询,但是不能大量使用join,(可以使用单表查询,然后将查询结果在应用程序中进行关联) 3、使用事务 4、使用limit进行分页操作 5、使用索引,(前导模糊查询不能使用索引,b避免使用!=、或not in或<>等否定操作符,字段的默认值不要未null,在字段上进行计算不能命中索引,避免使用or) 7、谈一谈悲观锁和乐观锁以及SQL的实现 悲观锁

MySQL必知存储引擎

家住魔仙堡 提交于 2020-01-08 22:21:30
Mysql存储引擎 1.MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务. 2.InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎. 3.BDB源 自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性 4.Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失 5.Merge将一定数量的 MyISAM 表联合而成一个整体,在超大规模数据存储时很有用 6.Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差 7.Federated将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用 8.Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用 9.CSV 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .csv 文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV 存储引擎不支持索引。 10

布式事务和解决方案理论

≯℡__Kan透↙ 提交于 2020-01-08 18:54:12
原文作者:VectorJin https://juejin.im/post/5e066c9ff265da33b0718f89 1. 本地事务   事务Transaction由一组SQL组成,具有四个ACID特性 1.1 ACID Atomicity 原子性 构成事务的一组SQL,要么全部生效,要么全不生效,不会出现部分生效的情况 Consistency 一致性 数据库经过事务操作后从一种状态转变为另一个状态。可以说原子性是从行为上描述,而一致性是从结果上描述 isolation 隔离性 事务操作的数据对象 相对于 其他事务操作的数据对象相互隔离,互不影响 durability 持久性 事务提交后,其结果就是永久性的,即使发生宕机(非磁盘损坏) 1.2 事务实现   对于MySQL数据库(InnoDB存储引擎)而言,隔离性是通过不同粒度的锁机制来实现事务间的隔离;原子性、一致性和持久性通过redo log 重做日志和undo log回滚日志来保证的。    redo log: 当数据库对数据做修改的时候,需要把数据页从磁盘读到buffer pool中,然后在buffer pool中进行修改,那么这个时候buffer pool中的数据页就与磁盘上的数据页内容不一致,称buffer pool的数据页为dirty page 脏数据,如果这个时候发生非正常的DB服务重启