mysql不得不说的事务问题总结

定义

事务,什么是事务,它是数据库操作的最小工作单元,是作为单个逻辑工作单元的一系列操作;
或者说,事务是一组不可再分割的操作集合。

典型事务场景:

转账
update user_account set balance = balance - 1000 where userID = 3;
update user_account set balance = balance +1000 where userID = 1;

如何开启

begin / start transaction -- 手工
commit / rollback -- 事务提交或回滚
SHOW VARIABLES like 'autocommit'; 查看是否开启自动提交
set session autocommit = on/off; -- 设定事务是否自动开启

JDBC 编程:
connection.setAutoCommit(boolean);
Spring 事务AOP编程:
expression=execution(com.gpedu.dao..(..))

事务的特性(谨记 ACID)

原子性

最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚。

一致性

事务中操作的数据及状态的改变是一致的,即写入资料的结果必须完全符合预设的规则,不会因为出现系统意外导致状态不一致。比如上面转账的例子,如果第一个账户减掉1000块钱,那么第二个不可以只加几百块钱,数据必须是对的上的。

隔离性

一个事务所操作的数据在提交之前对其他事务可见性设定,一般设定不可见。

持久性

事务所作的修改会永久保存,不会因为系统意外导致数据的丢失。

事务并发时带来的一些问题

1.脏读

一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条记录的数据处于不一致状态;此时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并做进一步的处理,就会产生未提交的数据依赖。

2.不可重复读

一个事务在读取某些数据后,再次读取以前读过的数据,发现读出来的数据已经发生了变化,或者某些记录已经被删除

3.幻读

一个事务按照相同的检索条件,重新读取以前检索过的数据,却发现其他事务插入了满足查询条件的新数据,该现象就称为“幻读”,表现为新插入数据

4.更新丢失

当两个或者多个事务选择同一行,然后基于最初选定的值进行更新操作时,由于每个事务都不知道其他事务的存在,则会发生丢失更新问题,即最后的更新并覆盖了前一个程序员所做的更改。

针对上面产生的问题解决定义了四种隔离级别

隔离级别

SQL92 ANSI/ISO标准:
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

Read Uncommitted(未提交读) --未解决并发问题
事务未提交对其他事务也是可见的,会有脏读(dirty read)

Read Committed(提交读) --解决脏读问题
一个事务开始之后,只能看到自己提交的事务所做的修改,但是不可重复读(nonrepeatable read)

Repeatable Read (可重复读) --解决不可重复读问题
在同一个事务中多次读取同样的数据结果是一样的,这种隔离级别未定义解决幻读的问题

Serializable(串行化) --解决所有问题
最高的隔离级别,通过强制事务的串行执行 ,所有的事务都串行指向。

见下表

隔离级别是怎么实现的??

通过锁还有MVCC来实现。

见这篇文章: https://www.jianshu.com/p/b32086b9c38d

spring事务的传播性

基本上,在使用spring开发的时候,也需要关注事务传播性。所谓spring 事务的传播属性,就是定义在存在多个事务同时存在的时候,spring 应该如何处理这些事务的行为。这些属性在TransactionDefinition 中定义,具体常量的解释见下表:


xml使用:


注解方式使用:


更详细的,我突然发现了一片文章,整理得更细致。
https://blog.csdn.net/hcmony/article/details/77850183

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容