数据库事务

SQL Server 事务隔离级别详解

浪尽此生 提交于 2020-01-31 12:28:13
SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用。 步骤 事务隔离级别通过影响读操作来间接地影响写操作;可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别。 事务隔离级别总共有6个隔离级别: READ UNCOMMITTED(未提交读,读脏),相当于(NOLOCK) READ COMMITTED(已提交读,默认级别) REPEATABLE READ(可以重复读),相当于(HOLDLOCK) SERIALIZABLE(可序列化) SNAPSHOT(快照) READ COMMITTED SNAPSHOT(已经提交读隔离) 对于前四个隔离级别:READ UNCOMMITTED<READ COMMITTED<REPEATABLE READ<SERIALIZABLE 隔离级别越高,读操作的请求锁定就越严格,锁的持有时间久越长;所以隔离级别越高,一致性就越高,并发性就越低,同时性能也相对影响越大. 获取事务隔离级别(isolation level) DBCC USEROPTIONS 设置隔离 设置回话隔离 SET TRANSACTION ISOLATION LEVEL <ISOLATION NAME> --注意:在设置回话隔离时(REPEATABLE READ)两个单词需要用空格间隔开

SQL Server 事务隔离级别详解

╄→гoц情女王★ 提交于 2020-01-31 12:27:47
SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用。 步骤 事务隔离级别通过影响读操作来间接地影响写操作;可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别。 事务隔离级别总共有6个隔离级别: READ UNCOMMITTED(未提交读,读脏),相当于(NOLOCK) READ COMMITTED(已提交读,默认级别) REPEATABLE READ(可以重复读),相当于(HOLDLOCK) SERIALIZABLE(可序列化) SNAPSHOT(快照) READ COMMITTED SNAPSHOT(已经提交读隔离) 对于前四个隔离级别:READ UNCOMMITTED<READ COMMITTED<REPEATABLE READ<SERIALIZABLE 隔离级别越高,读操作的请求锁定就越严格,锁的持有时间久越长;所以隔离级别越高,一致性就越高,并发性就越低,同时性能也相对影响越大. 获取事务隔离级别(isolation level) DBCC USEROPTIONS 设置隔离 设置回话隔离 SET TRANSACTION ISOLATION LEVEL <ISOLATION NAME> --注意:在设置回话隔离时(REPEATABLE READ)两个单词需要用空格间隔开

MySql之深入分析MySql 的锁

时光毁灭记忆、已成空白 提交于 2020-01-31 11:21:47
文章目录 1.InnoDB 存储引擎的锁 1.1.锁的类型 -八中类型 1.2.锁的基本模式 1.2.1.表锁 1.2.2.行锁 1.2.3.关于行锁和表锁的粒度概述 1.3.锁的类型 1.3.1.Shared Locks (共享锁) ----->行级别的锁 1.3.1.1.概念 1.3.1.2.如何设置共享锁 1.3.1.2.如何释放共享锁 1.3.1.3.案例1-查询加锁后查询 1.3.1.3.案例2-查询加锁后更新 1.3.2.Exclusive Locks(排它锁)又称写锁或者X锁 ----->行级别的锁 1.3.2.1.概念 1.3.2.2.如何设置排它锁 自动加锁 delete/update/insert 手动加锁 FOR UPDATE 1.3.2.3.如何释放排它锁 commit/rollback; 1.3.2.3.案例演示 1.3.3.意向锁 1.3.3.1.概念 1.3.3.1.如何设置意向锁 1.3.3.2.意向锁的意义 1.3.3.3.意向锁使用场景 1.3.3.4.案例演示- 行锁之后进行表锁试验 1.3.3.5.案例演示- 表锁之后进行行锁试验 1.3.3.6.解锁 1.4. 数据准备 SET NAMES utf8mb4 ; SET FOREIGN_KEY_CHECKS = 0 ; -- -- -- -- -- -- -- -- -- -- -- -- -

NoSQL简介

偶尔善良 提交于 2020-01-31 06:08:34
1.什么是NoSql:   NoSql(Not Only SQL),意即“不仅仅是SQL”,指的是非关系型数据库。随着互联网Web2.0网站的兴起,传统的关系型数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型数据库则由于其本身的特点得到了非常迅速的发展。非关系型数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。例如谷歌或Facebook每天为他们的用户收集万亿比特的数据。 这些类型的数据存储不需要固定的模式 ,无需多余操作就可以横向扩展。 NoSql的好处:  易扩展:   NoSql数据库种类繁多,但是有一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩 展。也无形之间,在架构的层面上带来了可扩展的能力。  高性能:   NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。 一般MySQL使用Query Cache, 每次表的更新Cache就失效,是一种大粒度的Cache ,在针对Web2.0的交互频繁的应用,Cache性能 不高。 而NoSQL的Cache是记录级的,是一种细粒度的Cache ,所以NoSql在这个层面上来说就要性能高很多了。

Spring(13)_事务控制

我的梦境 提交于 2020-01-31 03:00:20
本系列博客汇总在这里: Spring 汇总 事务控制 一、什么是事务 二、Spring 使用注解对事务的控制 1、来处理事务传播特性 第一步 第二步 2、事务的并发 并发问题 脏读(dirty read) 不可重复读(unrepeatable read) 幻读(phantom read) 第一类更新丢失 第二类更新丢失 3、事务的隔离级别 三、使用配置文件对事务控制 源码工程文件为:spring3.2_10 & spring3.2_11 & spring3.2_12 & spring3.2_13 一、什么是事务 一荣俱荣,一损俱损,很多复杂的操作我们可以把它看成是一个整体,要么同时成功,要么同时失败。 事务的四个特征ACID 原子性(Atomic):表示组成一个事务的多个数据库的操作的不可分割的单元,只有所有的操作成功才算成功,整个事务提交,其中任何一个操作失败了都是导致整个所有操作失败,事务会回滚。 一致性(Consistentcy):事务操作成功后,数据库所处的状态和业务规则一致。如果A账户给B账户汇 100,A 账户减去 100,B 加上 100,两个账户的总额是不变的。 隔离性(islation):在多个数据库的操作相同的数据并发时,不同的事务有自己的数据空间,事务与事务之间不受干扰(不是绝对的)。干扰程度受数据库或者操作事务的隔离级别来决定,隔离级别越高,干扰就越低

Innodb事务中的锁实现(转)

百般思念 提交于 2020-01-31 01:01:16
目录 一次封锁or两段锁? MySQL中锁的种类 MVCC在MySql的InnoDB中的实现 1、RR级别的事务隔离级别真的无法解决幻读吗?答案是否 2、Mysql如何做到RR事务隔离级别下不会出现幻读(Next-Key锁=GAP锁+行锁) Serializable 一次封锁or两段锁? 因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数据,然后全部锁住,在方法运行之后,再全部解锁。这种方式可以有效的避免循环死锁,但在数据库中却不适用,因为在事务开始阶段,数据库并不知道会用到哪些数据。 数据库遵循的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁) 加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁(共享锁,其它事务可以继续加共享锁,但不能加排它锁),在进行写操作之前要申请并获得X锁(排它锁,其它事务不能再获得任何锁)。加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。 解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。 事务 加锁/解锁处理 begin; insert into test ….. 加insert对应的锁 update test set… 加update对应的锁 delete from test ….

深入理解大数据之——事务及其ACID特性

喜夏-厌秋 提交于 2020-01-30 22:13:48
目录 事务简介 事物的定义 事务的目的 事务的状态 事务的ACID属性 ACID简介 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 总结 参考文献 版权声明:本文为Heriam博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接: https://jiang-hao.com/articles/2019/backend-transactions-acid.html 事务简介 事物的定义 事务(Transaction)是由一系列对系统中数据进行访问或更新的操作所组成的一个程序执行逻辑单元(Unit)。在计算机术语中,事务通常就是指 数据库 事务 。 在数据库管理系统(DBMS)中,事务是数据库恢复和并发控制的基本单位。它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 例如,银行转帐工作:从源帐号扣款并使目标帐号增款,这两个操作必须要么全部执行,要么都不执行,否则就会出现该笔金额平白消失或出现的情况。所以,应该把他们看成一个事务。 在现代数据库中,事务还可以实现其他一些事情,例如,确保你不能访问别人写了一半的数据;但是基本思想是相同的——事务是用来确保 无论发生什么情况,你使用的数据都将处于一个合理的状态 : transactions

3. 高级

回眸只為那壹抹淺笑 提交于 2020-01-30 20:06:31
高级 3.1. 关系 3.2. 连接 3.3. 自关联 3.4. 子查询 3.5. 内置函数 3.6. 视图 3.7. 事务 3.8. 索引 简介 实体与实体之间有3种对应关系,这些关系也需要存储下来 在开发中需要对存储的数据进行一些处理,用到内置的一些函数 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 先看个问题 问:查询每个学生每个科目的分数 分析:学生姓名来源于students表,科目名称来源于subjects,分数来源于scores表,怎么将3个表放到一起查询,并将结果显示在同一个结果集中呢? 答:当查询结果来源于多张表时,需要使用连接查询 关键:找到表间的关系,当前的关系是 students表的id---scores表的stuid subjects表的id---scores表的subid 则上面问题的答案是: select students.sname,subjects.stitle,scores.score from scores inner join students on scores.stuid=students.id inner join subjects on scores.subid=subjects.id; 结论:当需要对有关系的多张表进行查询时,需要使用连接join 连接查询 连接查询分类如下: 表A inner join 表B

脏读、不可重复读、幻读

て烟熏妆下的殇ゞ 提交于 2020-01-30 19:08:01
脏读 出现脏读需要mysql设置事务隔离级别为 read uncommited 。 有两个session,A和B,现在A开启事务,假设有一条记录为, id=1,name=zhangsasn,money=1000 现在A做更新操作,把money增加200,但是还未提交事务。 此时B开启事务,进行了查询操作,B查询的结果就会money=1200,B进行修改操作,将money减少100,提交事务。那么B查询的结果就是money=1100 之后,A并没有提交事务,而是因为某种情况回滚了事务,那么A查询的结果是money=1200。 脏读就产生了。 在数据库层面防止脏读 只需要将mysql的隔离级别设置为read commited及以上就能防止脏读的产生 不可重复读 将事务的隔离级别设置为 read commited 有两个session,A和B,现在A开启事务,假设有一条记录为, id=1,name=zhangsasn,money=1000 A查询这条记录money=1000,此时B开启事务,并进行修改这条记录的money=1200,B提交事务。 A再次查询,此时money=1200。这就出问题了,A并没有提交事务,但是第二次读到的数据跟第一次竟然不一样,就算查询语句后面加上 lock in share mode 也没用。 这就是不可重复读。 在数据库层面防止不可重复读

你在家快疯了?20 道数据库面试解析学起来

人走茶凉 提交于 2020-01-30 15:49:37
面试的时候,发现数据库方面,忘得一塌糊涂,抽时间整理了一些数据库方面的题。 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL 默认是哪个级别? MySQL 常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别? MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景? 查询语句不同元素(where、jion、limit、group by、having 等等)执行先后顺序? 什么是临时表,临时表什么时候删除? MySQL B+Tree 索引和 Hash 索引的区别? 聚集索引和非聚集索引区别? 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁? 非关系型数据库和关系型数据库区别,优势比较? 数据库三范式,根据某个场景设计数据表? 数据库的读写分离、主从复制,主从复制分析的 7 个问题? 使用 explain 优化 sql 和索引? MySQL 慢查询怎么解决? 什么是 内连接、外连接、交叉连接、笛卡尔积等? mysql 都有什么锁,死锁判定原理和具体场景,死锁怎么解决? varchar 和 char 的使用场景? mysql 高并发环境解决方案? 数据库崩溃时事务的恢复机制(REDO 日志和 UNDO 日志)? 事务四大特性(ACID)原子性、一致性