mysql-事务管理(进阶)–待续

35次阅读

共计 898 个字符,预计需要花费 3 分钟才能阅读完成。

请口述以下问题:

什么是事务到特性,具体说说你到理解
请举一个案例描述为什么要用到事务(转账)
事务的隔离级别
待续。。。

1、事务到特性(ACID)

Atomicty 原子性事务不可再分。现实中的一个需求,由多条 SQL 实现时,现实中的一件事只有两种结果,要么成功要么失败。事务机制就实现了将多条 sql“当成”一条 sql 来执行,通过这种机制加上人为的判断,实现多条 sql 要么都成功,要第都失败。
Consistence 一致性事务的执行过程中,对数据表的影响是没有的。
Isolation 隔离性当一个事件的执行,不会影响其他客户端的数据表中查询到的结果。
Duration 永久性当一个事务执行交,其影响就是永久的。

A->B(A 给 B 转账 100)正常 mysql 流程:

A 账户
B 账户

A-100
B+100

可能情况:

情况
A 账户
B 账户

第一种
A-100
B+100

第二种
A-100
B

第三种
A
B+100

第四种
A
B

2、隔离性与隔离级别
当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。
SQL 标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable)

读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。事务没提交,做等变更别等事务能看到

读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。事务提交了,它做的变更别的事务才能看到

可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。读也加锁啊写也加锁,读写锁冲突,后面的事务等前面事务执行完成再执行,一串

隔离得越严实,效率就会越低。需要找一个平衡点。

正文完
 0