事务隔离级别

MySQL相关知识

一世执手 提交于 2020-03-12 11:58:06
目录 1. MySQL背景介绍 2. MySQL发展史 3. MySQL分支介绍 4. MySQL的优点 5. MySQL数据库组成 6. MySQL的原理 7. MySQL执行流程 8. MySQL日志 9. MySQL事务、锁、索引与SQL优化 ## MySQL背景介绍 随着互联网企业的兴起,例如阿里巴巴、网易、Yahoo、Facebook等大型互联网公司的推动,目前Mysql已经成为世界上最流行的数据库,并一步步开始占领了原有商业数据库的市场,目前Mysql已经成为互联网公司甚至部分传统公司的首选数据库。 ## MySQL发展史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,在2008年的时候AB公司被Sun公司收购,Mysql也就归属到了Sun公司下,但在Sun还没待多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本:Mysql5.5(5.1-5.5之间没有发布过版本),直至5.6Mysql就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引,至2019年,Mysql8.0.15已经GA(官方发布稳定版本),整体发展过程如下(AB版本不做加入): 5.1 → 5.5 → 5.6 → 5

笔记:MySQL相关知识

孤街醉人 提交于 2020-03-12 09:03:48
MySQL背景介绍 MySQL发展史 MySQL分支介绍 MySQL的优点 MySQL数据库组成 MySQL的原理 MySQL执行流程 MySQL日志 MySQL事务、锁、索引与SQL优化 MySQL背景介绍 随着互联网企业的兴起,例如阿里巴巴、网易、Yahoo、Facebook等大型互联网公司的推动,目前Mysql已经成为世界上最流行的数据库,并一步步开始占领了原有商业数据库的市场,目前Mysql已经成为互联网公司甚至部分传统公司的首选数据库。 MySQL发展史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,在2008年的时候AB公司被Sun公司收购,Mysql也就归属到了Sun公司下,但在Sun还没待多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本:Mysql5.5(5.1-5.5之间没有发布过版本),直至5.6Mysql就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引,至2019年,Mysql8.0.15已经GA(官方发布稳定版本),整体发展过程如下(AB版本不做加入): 5.1 → 5.5 → 5.6 → 5.7 → 8.0 MySQL分支介绍 MySQL 是一个开源数据库

6_Redis事务

心已入冬 提交于 2020-03-12 07:40:15
事务 是什么 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会被序列化,按顺序地串行执行而不会被其他命令插入,不许加塞 能干什么 一个队列中,一次性,顺序,排他性的执行一系列命令 1.正常执行 开启事务multi exec 执行命名 multi 开启事务 set k1 v1 -->queued 入队 set k2 v2 -->queued 入队 set k3 v3 exec 执行 2.放弃事务 mulit set k1 v1 -->queued 入队 set k2 v2 set k4 v4 set k5 v5 discard 放弃事务 3.全体连坐 ①命令错误全部回滚 multi set k1 v1 set k2 v2 set k3 v3 getset k3 命令错误没有设置值 set k4 v4 exec 全部都不能执行成功 4.源头债主 ② 数据错误,只有错误的那一条回滚,其他的无关 multi incr k1 set k2 22 set k3 33 set k4 v4 get k4 exec k1的值不是数字,不能正确执行,其他的命令都可以执行 5.watch 监控 悲观锁/乐观锁/CAS(Check And Set) 1.悲观锁:类似于表锁 2.乐观锁: 类似于行锁 3.CAS 初始化信用卡可用余额和欠额 set balance 100 set debt

MySQL 事务的隔离级别

偶尔善良 提交于 2020-03-12 02:40:39
1. 事务的ACID 事务的ACID是指事务拥有的4个特性的首字母组合:atomicity(原子性), consistency(一致性), isolation(隔离性)和durability(持久性)。 ①atomicity(原子性) :表示事务是一个不可分割的工作单元,要么在提交事务后所有更改成功,要么在回滚事务时撤消所有更改,不可以只执行其中的一部分操作。 ②consistency(一致性) :在每次提交、回滚之后或正在进行的事务,数据库始终保持一致状态。如正在跨多个表更新相关数据,则查询看到的将是所有旧值或所有新值,而不是新值和旧值的混合。 ③isolation(隔离性) :事务在进行过程中相互隔离,他们不能互相干扰,也不能看到彼此的未提交数据。 但可以通过修改隔离级别,查看其他事务正在处理的数据。 ④durability(持久性) :事务提交成功后,该事务所做的更改将会保存在数据库中。 2. 并发读取数据的问题 当事务读取另一个事务已修改的数据时,可能会发生dirty read(脏读)、non-repeatable read(不可重复读)和phantom read(幻读)之类的现象。 ①dirty read(脏读) :当前事务读取了另一个事务已更新但尚未提交的数据。后果就是另一个事务回滚了,此数据就为错误的无效数据。 ②non-repeatable read(不可重复读)

郝斌 SqlServer2005 学习笔记

不打扰是莪最后的温柔 提交于 2020-03-11 23:56:26
1.0 什么是数据库 狭义:存储数据的仓库。 广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库。 另外一种说法:数据库是由表、关系、操作组成。 2.0 为什么要学习数据库 几乎所有的应用软件的后台都需要数据库。 数据库存储数据占用的空间小,容易持久化。 存储比较安全。 容易维护和升级。 数据移植比较容易。 简化对数据的操作。 3.0 数据结构和数据库的区别 数据结构是在系统软件级别研究数据的存储和操作。(内存) 数据库是在应用软件级别研究数据的存储和操作。(外部存储) 4.0 数据库中连接概念 5.0 对内存数据的操作,编程语言更加灵活;对于硬盘数据的操作,通过数据库管理软件更加容易。但是对于复杂的数据操作,当通过数据库语言没法操作时,通常把数据先写入内存通过编程语言处理以后,再存入数据库。 6.0 建议初学者从三个方面学习数据库  数据库是如何存储数据的 字段、记录、表、约束  数据库是如何操作数据的 insert、update、delete、TL-SQL、存储过程、函数、触发器  数据库是如何显示数据的 select(查询) 7.0 创建数据库 8.0 删除数据库 9.0 数据库的备份和还原 10.0 数据库的分离和附加 11.0 用户的创建和密码修改 安全性→登录名 12.0 表以及表相关的基本概念 字段(也叫 列):模拟的是某一个事物的某一个静态的特征。

数据库-死锁

我的梦境 提交于 2020-03-11 17:21:43
死锁(Deadlock):是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。例如,如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发生了死锁现象。 产生死锁的原因主要是: (1)系统资源不足。 (2)进程运行推进的顺序不合适。 (3)资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 死锁的预防和解除: 1、 如何确定资源的合理分配算法,避免进程永久占据系统资源 2、防止进程在处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查

事务的入门(mysql)

喜夏-厌秋 提交于 2020-03-10 14:56:16
1:mysql对事务的支持。 DTL 语句 start transaction 开启事务 rollback 回滚事务 commit 提交事务。 在jdbc中使用事务 事务的特性 ACID A:原子性 C:一致性 I:隔离性 多用户并发 D:持久性 事务的隔离级别 在开启事务后,多线程并发操作同一段数据时的隔离问题。互不干扰才是正确的。 脏读:一个线程中的事务读到了另一个线程中事务未提交的数据。 不可重复读:一个线程中的事务读到了另一个线程中 已提交的update数据 虚读:一个线程中的事务读到了另一个线程中 提交的insert的数据(update 不会增加数据,insert 会增加数据。) 控制事务的隔离性 事务的隔离级别 使用开启事务验证 使用锁机制 第二类丢失更新。 来源: https://www.cnblogs.com/CAOXIAOYANG/p/8853608.html

mysql锁和事务

孤街浪徒 提交于 2020-03-10 14:55:07
1,事务具有acid特性 2,事务的隔离级别   事务的隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。MySQL事务包含4个隔离级别(从低到高)   1)read uncommitted(dirty read)也称读未提交。事务可以看到其他事务更改了但没有提交的数据,即存在脏读的情况。   2)read committed 也称读提交。事务可以看到在它执行的时候,其他事务已经提交的数据,已经被大部分数据库采用。允许不可重复读,但不允许脏读。   3)repeatable read 也称可重复读。同一个事务同一个查询请求多次执行,获得记录相同,但不能出现幻读。   4)serializable也称序列化,最高级别,解决了幻读。它将锁加在所有访问的数据上。   该锁把普通的select语句默认改成select 。。。lock in share mode。 即查询语句涉及到的数据加上共享锁,阻塞其他事务修改真实的数据。  如下命令查询当前事务的隔离级别 show variables like ‘%tx%’;  不建议更改innodb的事务隔离级别。一些传统的数据库,如oracle使用了read-commited的隔离级别。但是大部分场景下,MySQL的用户都是由默认的repeatable read,此隔离级别下使用的验证比其他的隔离级别完善的多

MySQL笔记总结

橙三吉。 提交于 2020-03-10 13:12:37
总结一下我之前自己学习MySQL的笔记,仅供参考。 使用命令行调用MySQL一定要注意分号,不然会出现报错。建议自己练习的时候,可以先把代码打到记事本里,再粘贴到命令行中运行,就不容易犯错了。 1.数据库常用操作 1)查询数据库:show databases; 2)创建数据库:create databases 数据库名字; 3)使用某一个数据库:use 数据库名字; 4)显示当前数据库里的数据表: show tables; 5)创建数据表: create table 表名字( 数据类型+字段); 6)显示数据表:describe 数据表名; 7)查看数据表中的记录:select * from 数据表名; 8)向数据表中添加数据记录: insert into 数据表名 values(‘a’,‘b’,‘c’,NULL); 9)从数据表中删除数据记录:delete from 数据表名 where name = ’ ‘; 10)从数据表中修改记录: update 数据表名 set name= ’ 改后的名’ where 所属的类名=‘ 对应的名’; 2.MySQL支持的数据类型有三种:数值,日期/时间,字符串类型 3.MySQL建表约束 1) 主键约束 :能够唯一确定一张表中的一条记录,即通过给某个字段增加约束,可使得该字段不重复且不为空。 create table 数据表名( id

Spring 事务 转

白昼怎懂夜的黑 提交于 2020-03-09 18:02:56
出处: spring事务 1.背景   Spring提供了编程式事务和声明式事务,但由于编程性事务的侵入性,开发中普遍会使用Spring的声明式事务,下文中所说的Spring事务也都是指声明式事务。   Spring声明式事务底层是建立在AOP的基础上的,其本质就是对方法前后进行拦截,然后在目标方法之前创建或加入一个事务,在执行完目标方法之后根据执行执行情况提交或回滚事务。   声明式事务最大的优点就是不需要在业务逻辑代码中掺杂事务管理的代码,Spring事务提供两种事务管理方式:基于注解和基于XML配置,我们只需要简单的配置即可使用。   相比于编程式事务,由于声明式事务是基于AOP实现的,所以只能实现对方法的粗粒度的控制,而无法做到代码块级别的细粒度控制。   Spring事务包括5中参数,分别是:传播行为,隔离级别,是否只读,事务超时时间,回滚规则   本文分析下5种事务参数,然后对具体的传播行为给出Demo,以此给出其“细粒度”的事务实现。 2.Spring事务的5种参数 2.1 传播行为   传播行为定义了关于客户端和被调用方法的事务边界,Spring中定义了7中传播行为。 对嵌套事务的理解:   嵌套是子事务在父事务中执行,子事务是父事务的一部分,在进入子事务之前,父事务建立一个回滚点,叫save point,然后执行子事务,这个子事务也算是父事务的一部分