数据库事务

★ MYSQL隔离级别 通俗理解 + mysql、oracle默认事务隔离级别

时光总嘲笑我的痴心妄想 提交于 2020-03-18 18:38:43
★  脏读    : 读取了前一事务 未提交 的数据 ;   不可重复读 : 读取了前一事务 提交 的数据; ★ 幻读 与 不可重复读       common  :都是读取了另一条已经提交的事务(这点与脏读不同);   differences :     不可重复读 :查询的都是同一个数据项     幻读    :针对的是一批数据整体(比如数据的个数) 不可重复读eg:   < 当隔离级别设置为Repeatable read 时,可以避免不可重复读 >   eg2: 在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。     与此同时,事务B把张三的工资改为8000,并提交了事务。     随后,在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。(大部分数据库缺省的事物隔离级别都不会出现这种状况) 幻读eg:   eg1: 目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。     此时,事务B插入一条工资也为5000的记录,并且commit了。     这时,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。     (大部分数据库缺省的事物隔离级别都会出现这种状况,此种事物隔离级别将带来表级锁)   eg2:

什么是脏读,不可重复读,幻读

蹲街弑〆低调 提交于 2020-03-18 18:22:11
1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果 只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。 3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。 如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。 补充 :

谈谈你对spring框架的理解?

无人久伴 提交于 2020-03-18 17:48:49
我认为spring 就是一个框架的集成器,通常使用spring 来管理action 层和DAO 层。Spring本身有很多的组件,比如:MVC、IOC、AOP、DaoSupport等等。IOC 本身也就是一个容器,它管理了所有的bean 和bean 之间的依赖关系。 IOC 也叫作控制反转,核心是BeanFactory。也就意味着IOC 是基于工厂模式设计的,同时这个工厂生产的bean 默认是单例的。如果想修改单例变成多实例,则需要修改bean 的scope属性,值是prototype。在没有使用IOC 以前,程序员需要自己在对应的类中new 相关依赖的对象。 比如UserAction依赖于UserService完成业务操作,而UserService又依赖于UserDAO完成数据库操作。所以需要在action 中new servcie,在service 中new DAO。这样的方式,是由程序员来管理了对象的生命周期和他们之间的依赖关系,耦合度很高,不利于程序的拓展。所以通过IOC 来管理bean 和依赖关系,可以解耦合。 我们将所有的action、service 和dao等类定义成IOC 的一个bean 组件,此时类的实例化就交给了IOC 的beanFactory,由工厂来负责实例化bean 的对象。IOC 有三种注入方式,属性注入、构造器注入和接口注入。接口注入只是spring

06章:事务、视图和索引

此生再无相见时 提交于 2020-03-18 13:58:17
一: 事务 1. 含义 :事务是一个 不可分割的整体 ,事务中的多个执行过程,同生共死。要么都执行成功,要么都执行失败。 事务必须具备以下四个属性,(简称:ACID): ①. 原子性(Atomicity): 事务的各元素是不可分的(原子的)。事务中的所有元素必须作为一个整体提交或回滚。如果事务中的任何元素失败,则整个事务将失败。 ②. 一致性(Consistency): 当事务完成时,数据必须处于一致状态。也就是说,在事务开始之前,数据库中存储的数据处于一致状态。 ③. 隔离性(Isolation): 对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。 ④. 持久性(Durability): 指不管系统是否发生了故障,事务处理的结果都是永久的。 2. 如何执行事务? 语法: ①: 开始事务 (显式地标记一个事务的起始点) Begin Transaction ②: 提交事务 (标志一个事务成功结束) Commit transaction ③: 回滚(撤销)事务 (清除自事务起始点至该语句所做的所有数据更新操作,将数据状态回滚到事务开始前,并释放由事务控制的资源) Rollback transaction 3. 事务分类 在SqlServer中,事务有以下 3种类型 : ①:显式事务:(实际开发中最常用,明确的指定事务的开始边界)

事务&视图和索引

谁说胖子不能爱 提交于 2020-03-18 13:57:42
一:事务 1.含义:事务是 一个不可分割的整体 ,事务中的多个执行过程, 同生共死 。要么都执行成功,要么都执行失败。   事务必须具备以下四个属性,(简称: ACID ):     ①. 原子性(Atomicity) :事务的各元素是不可分的(原子的)。事务中的所有元素必须作为一个整体提交或回滚。如果事务中的任何元素失败,则整个事务将失败。     ②. 一致性(Consistency) :当事务完成时,数据必须处于一致状态。也就是说,在事务开始之前,数据库中存储的数据处于一致状态。     ③. 隔离性(Isolation) :对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。     ④. 持久性(Durability) :指不管系统是否发生了故障,事务处理的结果都是永久的。 2.如何执行事务? 语法: ①: 开始事务 (显式地标记一个事务的起始点) Begin Transaction ②: 提交事务 (标志一个事务成功结束) Commit transaction ③: 回滚(撤销)事务 (清除自事务起始点至该语句所做的所有数据更新操作,将数据状态回滚到事务开始前,并释放由事务控制的资源) Rollback transaction 3.事务分类 在SqlServer中,事务有以下3种类型: ①: 显式事务 :

Mysql 视图&事务&触发器

白昼怎懂夜的黑 提交于 2020-03-18 13:57:11
参考资料 一、视图 视图的含义: 视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表。 1、创建视图 #语法:CREATE VIEW 视图名称 AS SQL语句 create view teacher_view as select tid from teacher where tname='李平老师'; #于是查询李平老师教授的课程名的sql可以改写为 mysql> select cname from course where teacher_id = (select tid from teacher_view); +--------+ | cname | +--------+ | 物理 | | 美术 | +--------+ rows in set (0.00 sec) #!!!注意注意注意: #1. 使用视图以后就无需每次都重写子查询的sql,但是这么效率并不高,还不如我们写子查询的效率高 #2. 而且有一个致命的问题:视图是存放到数据库里的,如果我们程序中的sql过分依赖于数据库中存放的视图, 那么意味着,一旦sql需要修改且涉及到视图的部分,则必须去数据库中进行修改,而通常在公司中数据库有专门的DBA负责, 你要想完成修改,必须付出大量的沟通成本DBA可能才会帮你完成修改,极其地不方便 2、查看视图 select * from course_view; create

mysql基础教程(四)-----事务、视图、存储过程和函数、流程控制

心不动则不痛 提交于 2020-03-18 13:54:59
事务 概念 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的。 而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚。所有受到影 响的数据将返回到事物开始以前的状态;如果单元中的所 有SQL语句均执行成功,则事物被顺利执行。 存储引擎 概念 在mysql中的数据用各种不同的技术存储 在文件(或内存)中。 查看 通过 show engines; 来查看mysql支持的存储引擎。 常见引擎 在mysql中用的最多的存储引擎有:innodb, myisam ,memory 等。其中innodb支持事务,而 myisam、memory等不支持事务。 事务特点 事务的ACID(acid)属性 1. 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么 都发生,要么都不发生。 2. 一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态 。 3. 隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个 事务内部的操作及使用的数据对并发的其他事务是隔离的,并发 执行的各个事务之间不能互相干扰。 4. 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是 永久性的

事务 , 视图 , 和索引

别说谁变了你拦得住时间么 提交于 2020-03-18 13:53:29
01. 事务 什么是事务? 事务是单个的工作单元 如在某一项事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分.如果事务遇到错误且必须取消或回滚,则所有数据更改均被清楚 为什么需要事务? 在银行业务中,有一条记账原则 ,即又借有贷,借贷相等,为了保证这种原则,每发生一笔银行业务,就必须确保会记账目上 借方科目和贷方科目至少各记一笔,并且这两笔账要么同时成功,要么同时失败. 视图使得人们可以为一个或者多个数据表定义一个特殊的表现形式。视图在表现行为上与表没有差别,可以select查询,也可以用insert,update,delete来修改数据。 一般使用视图的理由有两个,一个是安全,例如一个表中包含了员工的个人资料,那像电话姓名这些是所有人都可以查询的,但是像薪水这些东西就只有特定的人能查询了,因此最好的办法就是将所有人都可以访问的数据部分创建为一个视图,供别人查询。另一个是方便,视图使用起来很方便,不用输入复制的命令 在视图里修改数据:能不能修改某个视图中的数据取决于视图的select命令,可刷新的视图需要满足以下几个条件: (1)当初定义的select中不得包含group by、distinct、limit、union或having等子命令 (2)如果视图中的数据来自一个以上的表,那它总是不可刷新的 (3)视图中应包含主键索引,唯一索引

ORACLE数据库事务隔离级别

∥☆過路亽.° 提交于 2020-03-18 13:33:55
事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题: 1、 幻想读 :事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。 2、 不可重复读取 :事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。 3、 脏读 :事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。 为了处理这些问题,SQL标准定义了以下几种事务隔离级别 READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。 READ COMMITTED 允许幻想读、不可重复读,不允许脏读 REPEATABLE READ 允许幻想读,不允许不可重复读和脏读 SERIALIZABLE 幻想读、不可重复读和脏读都不允许 Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读 SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle

高性能MySQL 第一章 mysql架构与历史

人盡茶涼 提交于 2020-03-18 10:44:43
mysql的存储引擎架构把查询处理及其他系统任务和数据的存储/提取相分离 1.1 mysql逻辑架构   第一层:链接处理、授权认证、安全等大多数基于网络的工具或者服务都有类似的架构   第二层:核心服务,查询解析、分析、优化、缓存、所有的内置函数(日期、时间等),所有跨存储引擎的功能,存储过程、触发器、视图等   第三层:存储引擎,负责数据的存储和提取   1.1.1 连接管理与安全性     每个客户端连接都会在服务器进程中拥有一个线程,服务器会缓存线程,   1.1.2 优化与执行     mysql会解析查询,并创建解析书,然后优化。     在查询之前,会先检查查询缓存 1.2 并发控制   1.2.1 读写锁     读锁和写锁     1.2.2 锁颗粒       表锁:       行级锁:可以最大程度的支持并发,只在存储引擎层实现 1.3 事务   原子性、一致性、隔离性、持久性   1.3.1 隔离级别     未提交读:事务的修改,即使没有提交,对其他事务也都是可见的。脏读     提交读:一个事务只能看见已经提交的事务的修改。不可重复读     可重复读:保证了同一个事务中多次读取同样记录的结果是一致的,mvcc,mysql默认隔离级别     可串行化:强制事务串行执行   1.3.2 死锁     各种死锁检测和死锁超时机制