一:事务(transaction)的概念与特性
事务是一系列操作,这些操作组成了一个逻辑工作单元。这个逻辑工作
单元中的操作作为一个整体,要么全部成功,要么全部失败。
事务的特性(ACID):
1.原子性(Atomicity):
事务中的一系列操作作为一个原子性的逻辑工作单元,这个逻辑工作
单元中的操作要么全部成功,要么全部失败。
2.一致性(Consistency):
事务操作之前与操作之后数据库系统的数据状态是从一种一致性状态
转换到另一种一致性状态。
3.隔离性(Isolation)
多个事务并发执行时,互相不能看到对方的操作过程。
4.持久性(Durability)
一旦事务执行成功,对数据库系统的影响是持久性的。
二:事务的隔离级别
事务的隔离级别有四个:
1. 读未提交(read uncommitted)
可能会发生脏读现象(读取了其他事务未提交的数据)、
不可重复读、幻读(两次读取的行数不一致)。
2. 读提交(read committed)
可能发生不可重复读、幻读(两次读取的行数不一致)。
3. 可重读级别(repeatable read)
MySQL默认隔离级别。注意:MySQL的InnoDB存储引擎已经解决了幻读问题。
4. 串行化级别(serializable)
隔离级别最高,甚至针对普通的查询操作都会加锁。
eg: select * from student; 执行该查询会默认加读锁(共享锁)。
三:读锁(共享锁)与写锁(排他锁)
读锁(共享锁):一个事务对某些数据加上了读锁,其他事务对这些数据也可以
加读锁;但是其他事务不能对这些数据加写锁。
写锁(排他锁):一个事务一旦对数据加上了写锁,则其他事务既不能对数据加
读锁,也不能加写锁。
一般情况下,不需要显式对数据加锁,因为DBMS会自动为我们添加锁。
添加读锁:
select 字段列表 from 表名称 lock in share mode;
还要注意:在事务的“串行化隔离级别中”,"select 字段列表 from 表名称"也会
自动加读锁。
添加写锁:
update、delete会自动添加写锁。
select 字段列表 from 表名称 for update;
相关文章
- 一:事务(transaction)的概念与特性
- 事务的概念及事务的四个特性
- 【Cache 讲解系列之一】Cache 的基本概念与工作原理
- 直线回归和相关------(一)回归和相关的概念与直线回归
- Loadrunner中与事务相关的概念及函数
- 【WPF应用35】深度解析WPF中的TreeView控件:功能、用法、特性与最佳实践-一、TreeView控件的基本概念
- Spring事务隔离级别与MySQL设置的级别不一样怎么办
- 概率论与数理统计图式(第一章 概率论的基本概念)1.2概率
- 如何获取显示器的EDID信息 Q1: 为什么要写这篇文章? A1:在最近的工作中遇到了不少问题,其中很多都是和EDID相关的。可以说,作为一家以“显示”为生的企业,我们时时刻刻在与EDID打交道。EDID这东西很简单,但是如果不了解其基本原理和概念的话,会给我们的工作带来不少麻烦。因此,我决定将我对EDID的理解和调试EDID的一些经验写成一篇文章,供大家学习和参考,希望能对大家的工作有所帮助。为了方便阅读和理解,文章写成问答的形式。由于本人接触EDID的时间不长,文章中难免
- Hibernate中一级缓存概念以及flush与clear的区别