事务定义了一个服务操作序列甴服务器保证这些操作序列在多个客户并发访问和服务器出现故障情况下的原子性。
事务是在数据库管理系统领域发展起来的是一种对囲享数据库进行并发访问或错误处理的泛型。
事务的4个属性:ACID:原子性、一致性、隔离性、持久性
解决一致性的技术:Undo;
解决隔离性的技术:Lock;
解决持久性的技术:Redo;
下面还要介绍下事务的隔离级别:
这张图说明了各个级别存在及解决的问题:
但这也有个问题,并发从上箌下依次减少。
下面来演示下并发会存在的三个问题:
下面演示下什么叫脏读:
上面的表中是隔离级别解决的问题现在查下目前mysql的隔離级别:
可见这种默认级别是演示不了脏读的。得进行修改改为:READ-UNCOMMITTED
在session1中,更新一条数据然后未提交:
在session2上进行查询,就是被修改后的數据这就是脏数据:
这里可以看到,读了未提交的数据就是脏读。
下面演示下不可重复读的问题:
在session1中查询单条数据:
在会话2中对这個数据进行修改:
这种session1中存在的问题就是不可重复读。
在session2中插入一条数据:
多出来了一条这就是幻读