mysql 事务

来源:互联网 发布:html表白网页源码内容 编辑:程序博客网 时间:2024/05/16 12:11

事务的作用主要是保证:

1.数据的原子性
2.一致性
3.隔离性–事务之间不能相互影响.
4.持久性–一旦成功执行,则不能再改变

锁的主要作用是保证并发操作.
事务的隔离可以实现事务的并发,即多个事务同时执行.其实事务的隔离是通过锁机制实现的.

隔离级别

1.read uncommit 所有问题都不能解决
2.read commit 解决 问题1
只要别的事务提交了,其他事务立即可以查看到改变.

3.repeatable read (可重复读) 解决 问题 1,2
即每个事务session 中两条相同的语句查询结果是一致的;即使其他事务已经提交了更新数据.直到事务提交了才可以查看其他事务做出的改变.这样就保证了可重复读.

4.serializable (串行) 所有,但是可能导致大量锁等待.

不同的级别可以解决不同的并发问题.
问题有:
1.脏读 – 一个事务可以读取另一个事务未提交的数据.
2.不可重复读 –同一个事务内,两条相同的查询语句的结果不一致
3.幻读 – 别的事务已提交数据,但是在这个事务内看不见,但是也可以对这个看不见的数据进行删除更新等.

补充

用select @@session.tx_isolation; 可以查看当前回话的隔离级别.
select @@global.tx_isolation; 查看服务器全局的隔离级别.

repeatable read 虽然不能解决幻读的现象,例如 别的事务添加提交了一个id 为100 的数据,这个事务不能查看到这条数据,但是如果在这个事务中同样插入一条id 为100 的数据,会提示主键重复的错误.
解决:
在repeatable read 的级别下,新插入的语句添加一个read 锁.那么别的事务添加同一id 的记录时会阻塞.这样就可以避免幻读.

0 0
原创粉丝点击