mysql事务

[转帖]一张图让你看懂InnoDB

匿名 (未验证) 提交于 2019-12-02 23:47:01
一张图让你看懂InnoDB 灵魂自由的忙人 阅读数 299 https://blog.csdn.net/xiaoyi23000/article/details/80263328 原来InnoDB 与 oracle的redo 机制是一样的... 没必要学习最新的版本 用旧的版本 反而更容易学习到内核和本质. 熟悉MySQL的人,都知道InnoDB存储引擎,如大家所知,Redo Log是innodb的核心事务日志之一,innodb写入Redo Log后就会提交事务,而非写入到Datafile。之后innodb再异步地将新事务的数据异步地写入Datafile,真正存储起来。 那么innodb引擎有了redo log和buffer pool以后,为什么能够在提升性能的同时,还能保证不丢数据呢? Buffer Pool, Redo Log以及Datafile之间的具体关系是什么呢。 另外Innodb还有一大堆概念,Dirty Page, LRU, LSN,Checkpoint等等,这些概念在Innodb里是什么运作的呢? 下面通过一张图来告诉大家 Buffer Pool, Redo Log以及Datafile的关系 图1 Innodb的原理 大家可以把innodb的事务写入过程看成写作一篇文章的过程。Innodb的写入过程其实和我们写作的过程是非常类似的。 试想,领导让我们写一篇文章

SQL֮COMMIT

匿名 (未验证) 提交于 2019-12-02 23:43:01
在使用oracle数据库时,有时需要提交事务,有时不需要.具体什么时候需要,什么时候不需要? DML语句:update,delete,insert等修改表中数据的需要commit DDL语句:create,drop,alter等修改表结构的,就不需要commit,因为内部隐藏了commit Mysql中默认在进行DML操作时,是隐式提交事务 2.Oracle Oracle中在进行DML操作时,需要显示提交事务.

spring 传播行为与数据库事务ACID

匿名 (未验证) 提交于 2019-12-02 23:43:01
数据库事务ACID特性   数据库事务正确执行的4个基础要素是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。   这里的原子性、一致性和持久性都比较好理解,而隔离性就不一样了,它涉及了多个事务并发的状态。首先多个事务并发会产生数据库丢失更新的问题,其次隔离性又分为多个层级。 隔离级别    脏读 是最低的隔离级别,其含义是允许一个事务去读取另一个事务中未提交的数据。以丢失更新的消费为例进行说明,如表所示。   为了克服脏读,SQL标注提出了第二个隔离级别―― 读/写提交 。所谓读/写提交,就是说一个事务只能读取另一个事务已经提交的数据。依旧以丢失更新的夫妻消费为例,如表所示。 不可重复读   为了克服不可重复读带来的错误,SQL标准又提出了一个 可重复读 的隔离级别来解决问题。注意,可重复读这个概念是针对数据库同一条记录而言的,换句话说,可重复读会使得同一条数据库记录的读/写按照一个序列化进行操作,不会产生交叉情况,这样就能保证同一条数据的一致性,进而保证上述场景的正确性。但是由于数据库并不是只能针对一条数据进行读/写操作,在很多场景,数据库需要同时对多条记录进行读/写,这个时候就会产生下面的情况,如表所示。   为了克服幻读,SQL标准又提出了 序列化 的隔离级别。它是一种让SQL按照顺序读/写的方式

CYQ.Data 轻量数据层之路 V4.5 版本发布[更好的使用体验,更优的缓存机制]

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> 前言: 继上一版本: CYQ.Data 轻量数据层之路 V4.3 版本发布[增加对SQLite,MySQL数据库的支持] ,至今已快近3个月了,中间仅有V4.5beta版本供下载,却没正式发布,今天,终于要把V4.5给发布了。 下面看一下新版本的修改记录 实用: 1:MAction:Select方法增加重载:Select(string where); 2:FormatWhere处理了"Parent is null"的"is"关键字;处理"order by"语句补充为"1=1 order by ..." 3:MAction增加Exists方法 4:MDataRow 增加ToEntity<T>()方法转实体 5:允许更新Null值到数据库中 事务: 6:修正事务二次回滚的错误,即连续调用两次action.RollBack(); 7:修正二次启动事务。 缓存: 8:缓存增加Set方法,无则添加,有则更新 9:大力修改Cache机制,使信息更容易查看.[定时清缓存] 其它: 10:MDataRow 重写Clear()方法,该方法将清除行的数据[即数据重置为Null] 11:AOP的End方法修改返回值为MDataRow和MDataTable结果集 12:修正OrmBase转实体时值为DBNull.Value的转换异常

分布式事务二TCC

淺唱寂寞╮ 提交于 2019-12-02 23:24:01
明天再整理 分布式事务解决方案之TCC 4.1.什么是TCC事务 TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/Cancel操作若执行失败,TM会进行重试。 分支事务失败的情况: TCC分为三个阶段: 1. Try 阶段是做业务检查(一致性)及资源预留(隔离),此阶段仅是一个初步操作,它和后续的Confirm 一起才能真正构成一个完整的业务逻辑。 2. Confirm 阶段是做确认提交,Try阶段所有分支事务执行成功后开始执行 Confirm。通常情况下,采用TCC则认为 Confirm阶段是不会出错的。即:只要Try成功,Confirm一定成功。若Confirm阶段真的出错了,需引入重试机制或人工处理。 3. Cancel 阶段是在业务执行错误需要回滚的状态下执行分支事务的业务取消,预留资源释放。通常情况下,采用TCC则认为Cancel阶段也是一定成功的

MySQL锁机制

£可爱£侵袭症+ 提交于 2019-12-02 23:08:38
一、基本概念   从操作的类型上来看,分为读锁和写锁:     读锁:共享锁,对同一份数据,多个读操作可以同时进行且相互间不影响     写锁:排它锁,独占资源。在当前操作未完成之前,其他写操作必须等待。读操作不影响。        排它锁作用于innodb,且必须在事务块中执行。在进行事务操作时,for update会对结果集中的每一行数据加排它锁,其他线程对于结果集中的数据进行修改操作,全部阻塞。   从锁数据的细粒度上来看,分为行锁和表锁。 二、测试   测试环境:mysql 5.5.6、Navicat for mysql。   新建表: CREATE TABLE `tb_user` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `password` varchar(10) DEFAULT NULL, `sex` char(1) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;   开启两个查询会话,模拟多请求。   1、表锁     锁的粒度偏大,开销小,锁表快,但是发生锁竞争的概率特别高,并发度低。     对于更新update、delete

十四、详解事务

五迷三道 提交于 2019-12-02 22:44:12
本篇内容 什么是事务,它有什么用? 事务的几个特性 事务常见操作指令详解 事务的隔离级别详解 脏读、不可重复读、可重复读、幻读详解 演示各种隔离级别产生的现象 关于隔离级别的选择 一、什么是事务?    数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。 二、事务的几个特性(ACID)     原子性(Atomicity)   事务的整个过程如原子操作一样,最终要么全部成功,或者全部失败,这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的。   一致性(Consistency)   事务开始之前、执行中、执行完毕,这些时间点,多个人去观察事务操作的数据的时候,看到的数据都是一致的,比如在事务操作过程中,A连接看到的是100,那么B此时也去看的时候也是100,不会说AB看到的数据不一样,他们在某个时间点看到的数据是一致的。   隔离性(Isolation)   一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。   持久性(Durability)   一个事务一旦提交,他对数据库中数据的改变就应该是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性的。 三、Mysql中事务操作     mysql中事务默认是隐式事务

python 事务

匿名 (未验证) 提交于 2019-12-02 22:11:45
事务命令 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 转账实例: 1 2 UPDATE account set balance=balance-5000 WHERE name =”yuan”; UPDATE account set balance=balance+5000 WHERE name =”xialv”; create table test2(id int PRIMARY KEY auto_increment,name VARCHAR(20)) engine=innodb; INSERT INTO test2(name) VALUE ("alvin"), ("yuan"), ("xialv"); start transaction; insert into test2 (name)values('silv'); select * from test2; commit; -- 保留点 start transaction; insert into test2 (name)values('wu'); savepoint insert_wu; select * from test2; delete from test2 where id=4; savepoint delete1; select * from test2; delete from

ThinkPHP5事务回滚

匿名 (未验证) 提交于 2019-12-02 22:11:45
使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。 使用 transaction 方法操作数据库事务,当发生异常会自动回滚 1.手动控制事务 // 启动事务 Db::startTrans(); try{ $res = Db::table('user')->find(1); $rs = Db::table('user')->delete(1); if($res&&$rs){ // 提交事务 Db::commit(); } } catch (\Exception $e) { // 回滚事务 Db::rollback(); } 2.自动控制事务 Db::transaction(function(){ Db::table('user')->find(1); Db::table('user')->delete(1); }); 文章来源: ThinkPHP5事务回滚

MySQL数据库的事务及存储引擎

。_饼干妹妹 提交于 2019-12-02 22:09:20
一、关系型数据库与非关系型数据库  1.关系型数据库的特点:   1)数据以表格的形式出现   2)每行为各种记录名称   3)每列为记录名称所对应的数据域   4)许多的行和列组成一张表单   5)若干的表单组成数据库  2.关系型数据库的优势:    2.1 复杂的查询:可以使用SQL语句方便地在一个表以及多个表之间做非常复杂的数据查询。    2.2 事务支持:使得对于安全性能很高的数据访问要求得以实现。  3.非关系型数据库的优势:    3.1 性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。    3.2 可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。  问题:三种传统数据库之间的区别?   答:三者之间是根据数据之间的联系而去别的,层次性数据库是树形结构、网状型数据库是链接指针结构、关系型数据库是二维表结构。 二、事务(ACID)   事务(transaction)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单元。   事务必须具备以下四个属性,简称ACID属性:      原子性(atomicity) :事务是一个完整的操作。事物的各部操作是不可分的(原子的);要么都执行,要么都不执行