您的位置:首页 > 数据库 > MySQL

mysql 事务

2015-12-04 19:19 399 查看

事务的作用主要是保证:

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 的记录时会阻塞.这样就可以避免幻读.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: