事务隔离级别

mysql面试题三

帅比萌擦擦* 提交于 2019-12-03 07:23:44
1、MySQL的复制原理以及流程 (1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)

mysql面试题

◇◆丶佛笑我妖孽 提交于 2019-12-03 07:22:57
事务四大特性 原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态 一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的; 隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 MySQL 的事务隔离级别 未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read) 索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B

事务与锁

早过忘川 提交于 2019-12-03 07:22:46
事务 初学的时候,感觉事务的四大特性就那么回事,不就是一堆事要么完成,要么全部失败吗。还有经常说的脏读,幻读,不可重复读根本无法理解,就是那个存款取款的例子,我修改了数据,对方看到我修改的数据,这不很正常吗。现在看来,当时根本就不知道并发是什么鬼,更何谈并发事物了。 然后给你来一堆名词,共享锁,排它锁,悲观锁,乐观锁...... 想想就觉得那时候能记下来已经是奇迹了。 Spring 还给事务弄了一个传播机制的家伙, Spring 事务传播机制可以看这篇文章 。 本文应该来说是对初学者的福音,有一定经验的人看的话应该也会有收获。 事务的四大特性ACID 这个是刚入门面试的时候必问一个面试题,刚入行的时候我是硬生生背下来的。 原子性(Atomicity) 一件事情的所有步骤要么全部成功,要么全部失败,不存在中间状态。 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(Isolation) 两个事务之间是隔离程度,具体的隔离程度由隔离级别决定,隔离级别有 读未提交的 (read-uncommitted) 读提交的 (read-committed) 可重复读 (repeatable-read) 串行 (serializable) 持久性 (Durability) 一个事务提交后

事务

落花浮王杯 提交于 2019-12-03 07:15:40
什么是事务 : ​ 事务是指逻辑上的一组操作,这种操作要么全部发生(提交成功),要么全部失败(回滚)。 举例 : 张三李四 进行 转账的操作 ​ 张三向转账李四 1000元 张三余额-1000元 李四余额+1000元 ​ 不应该出现的是 在转账过程中由于一些意外,使张三的余额减去了1000元, 而李四并没有收到这笔钱。 使 用事务来进行管理。 必须全部成功(张三扣款,李四收款)或者一起失败(张三李四存款不变)。 事务的四大特性(ACID): ​ 原子性(Atomicity):是指事务一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 不能够单独运行。把一组操作放入事务中。 ​ 一致性(Consistency):事务执行的前后,数据的完整性要得到保证。 ​ 隔离性(Isolation):多个用户并发访问数据库的时候,一个用户的事务不会被其他用户的事务干扰,多个并发事务之间的数据要相互隔离。解决多个用户对同一个数据进行操作,数据库会有事务的隔离级别来解决。 ​ 持久性(Durability):一个事务一旦被提交,它对数据库中数据的的改变是永久性,即使数据库发生故障也不应该对其有影响。 并发访问问题----由隔离性引起 : ​ 1.脏读: ​ 指一个事务正在访问数据,并对其进行了修改,且未提交到数据库中。这时候另一个数据也访问这个数据,然后使用这个数据

事务面试题

断了今生、忘了曾经 提交于 2019-12-03 07:11:18
一 什么是事务?有什么用? 事务的特性ACID 事务提供了一种机制,可用来将一系列数据库更改归入一个逻辑操作。更改数据库后,所做的更改可以作为一个单元进行提交或取消。事务可确保遵循原子性、一致性、隔离性和持续性(ACID)这几种属性,以使数据能够正确地提交到数据库中。 1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作 要么都发生,要么都不发生。 2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致。 3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的 事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。 4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变 就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。 二 事务的并发会产生的问题有哪些 1.脏读 一个事务正在对数据进行更新操作,但是更新还未提交,另一个事务这时也来操作这组数据,并且读取了前一个事务还未提交的数据,而前一个事务如果操作失败进行了回滚,后一个事务读取的就是错误的数据,这样就造成了脏读 2.不可重复读 一个事务多次读取同一个数据,在该事务还未结束时,另一个事务也对该数据进行 了操作,而且在第一个事务两次读取之间,第二个事务对数据进行了更新,那么第一个

事务与锁

余生长醉 提交于 2019-12-03 07:08:51
事务 初学的时候,感觉事务的四大特性就那么回事,不就是一堆事要么完成,要么全部失败吗。还有经常说的脏读,幻读,不可重复读根本无法理解,就是那个存款取款的例子,我修改了数据,对方看到我修改的数据,这不很正常吗。现在看来,当时根本就不知道并发是什么鬼,更何谈并发事物了。 然后给你来一堆名词,共享锁,排它锁,悲观锁,乐观锁...... 想想就觉得那时候能记下来已经是奇迹了。 Spring 还给事务弄了一个传播机制的家伙, Spring 事务传播机制可以看这篇文章 。 本文应该来说是对初学者的福音,有一定经验的人看的话应该也会有收获。 事务的四大特性ACID 这个是刚入门面试的时候必问一个面试题,刚入行的时候我是硬生生背下来的。 原子性(Atomicity) 一件事情的所有步骤要么全部成功,要么全部失败,不存在中间状态。 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(Isolation) 两个事务之间是隔离程度,具体的隔离程度由隔离级别决定,隔离级别有 读未提交的 (read-uncommitted) 读提交的 (read-committed) 可重复读 (repeatable-read) 串行 (serializable) 持久性 (Durability) 一个事务提交后

(转)MySQL 加锁处理分析

跟風遠走 提交于 2019-12-03 05:33:51
> 文章首发于: clawhub.club 1、概念 死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种相互等待的现象。 具体的介绍可以参考我以前写的一篇文章: 【并发编程挑战】死锁 2、死锁检测 以下文字全部摘抄整理自《MySQL技术内幕 InnoDB存储引擎 第二版》,在InnoDB存储引擎中,采用wait-for graph(等待图)的方式来进行死锁检测。 wait-for graph要求数据库保存一下两种信息: 锁的信息链表 事务等待链表 通过上述链表可以构造出一张图,而在这个图中若存在回路,就代表存在死锁,因此资源间相互发生等待。在wait-for graph中,事务为图中的节点。在图中,事务T1指向T2定义为: 事务T1等待事务T2所占用的资源 事务T1发生在事务T2后面 事务T2所占用的资源不会被强制剥夺 下面通过一个例子分析,当前事务与锁的状态如下图: 由图可知: 事务等待列表中有4个事务,在wait-for graph中对应4个节点。 事务t2对row1(行)占用x锁(独占锁),事务t1对row2(行)占用s锁(共享锁) 事务t1等待事务t2所占用的row1资源,因此在wait-for graph中有条边从节点t1指向t2。 事务t2等待事务t1、t4所占用的row2资源,t4对于row2占用s锁。故存在t2指向t1、t4的边。 同样

Spring 事务管理

独自空忆成欢 提交于 2019-12-03 05:27:37
1. 事务基本概述 事务的特性 逻辑上的一组操作-,组成这组事务的各个单元,要么全部成功,要么全部失败 事务的特性(ACID) 原子性:事务不可分割 一致性:事务执行前后数据完整性保证一致 隔离性:一个事务不能干扰其它事务 持久性:事务一旦成功,数据就持久化到数据库 不考虑隔离性(使用锁)引发的问题 事务的并发引发的问题 读问题 脏读:一个事务读取另一个事务未提交的数据 不可重复读:一个事务读取到另一个事务update的数据,导致两次读取的结果不一致 虚读:一个事务读取到另一个事务insert或者delete的数 据,导致两次读取的结果不一致 写问题:丢失更新 不同的锁引发不同类型的事务(事务隔离级别) 不支持事务 read_uncommitted 未提交读, 不能解决任何读问题 read_committed 已提交读 ,不能读取未提交的事务, 能够解决脏读 repeateable_read 可重复读 ,能够保证两次读取的数据是一致的, 能解决脏读和不可重复读 serializable 可序列化 ,事务的最高级别, 可以解决脏读、不可重复读和虚读 2. Spring事务管理API 1. 平台事务管理器 PlateformTransactionManager PlateformTransactionManager 是一个接口 DataSourceTransactionManager

MySQL数据库5事务、视图、触发器、函数、数据库的备份

时光怂恿深爱的人放手 提交于 2019-12-03 05:19:33
目录 一、事务(important) 1.1什么是事务? 1.2解决办法 1.2.1事务的语法 1.2.2使用事务解决转账问题代码演示 1.2.3rollback 1.3事务的特性(important) 二、存储引擎(important) 2.1 innodb 2.2 myisam 2.3两种引擎的区别 三、视图 四、触发器 4.1简述 4.2用法 4.2.1增加 4.2.2删除 五、存储过程 5.1存储过程的创建 5.2存储过程的删除 六、函数 七、数据库的备份 7.1数据库的备份 7.2数据库的导入 也许人生就是这样,我们花大把时间迷茫,然后在几个瞬间成长。——无意间看到的一句话 一、事务(important) 1.1什么是事务? 事务指一组操作要么成功要么失败,在成功修改数据前原来的数据不会受影响,如果修改成功则数据将被更改,如果失败,则原数据库数据不变。 思考:银行转账,转账人如果已经进行了转账操作,而在对方还未收到转账时如果发生网络故障,对方没有收到钱,这个转着账如何处理?这时候就用到了事务,转账要么成功,两边数据都修改,要么失败,两边的数据都不变。 代码演示 create table user ( id int auto_increment primary key , name varchar (32) not null default '', salary int

Day 37 SQL基础(五)

牧云@^-^@ 提交于 2019-12-03 05:01:07
目录 事务处理 开始事务 回滚事务 提交事务 事务的特性 存储引擎 什么是存储引擎 各存储引擎的特性 概览 各种存储引擎的特性 各存储引擎的介绍 视图 创建视图 删除视图 修改视图 触发器 创建触发器 删除触发器 存储过程 创建无参存储过程 创建有参存储过程 执行存储过程 删除存储过程 SQL函数 事务处理 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性 开始事务 start transaction 标识事务的开始 回滚事务 rollback 用来回退(撤销)SQL语句 select * from users; start transaction; update users set age = 18 where id = 120; delete from users where name = 'tiny'; rollback; select * from users; rollback只能在一个事务处理内使用,在执行一条start transaction命令之后 提交事务 commit 一般的MySQL语句都是直接针对数据库表执行和编写的.这就是所谓的隐含提交,即提交(写或保存)操作是自动进行的. 但是.在事务处理块中,提交不会隐含地进行.为进行明确的提交,使用commit语句 start transaction;