(1)简述
    业务系统访问数据库时,往往是多个线程并发执行多个事务,对于数据库而言,会有多个事务同时执行,可能多个事务还会同时更新和查询同一条数据,所以会有一些问题需要数据库来解决,每个事务都会执行各种增删改查的语句,把磁盘上的数据页加载到缓存页,更新缓存页数据,记录redo log和undo log,最后提交事务或者回滚事务,多个事务会并发做上面的事情。
    如果多个事务对缓存页里的同一条数据同时进行更新或者查询,此时会产生问题。

    (2)多事务并发读写产生的问题
    会涉及到 脏写,脏读,不可重复读,幻读 四种问题
    (A) 脏写:事务B去修改了事务A的值,但是此时事务A还没提交,如果事务A发生回滚,就导致事务B修改的值没了,这就是脏写。
    (B) 脏读:事务B查询事务A修改过的数据,此时事务A还没提交,如果事务A发生回滚导致事务B再次查询就读不到刚才事务A修改的数据了,这就是脏读
    41.jpg 40.jpg
    42.jpg
    (3)总结
    无论是脏写还是脏读,都是因为一个事务更新或者查询了另一个还没提交的事务更新的数据,因为另外一个事务还没提交,它随时会发生回滚,那么必然导致更新的数据就没了,或者之前查询的数据没了,这就是脏写和脏读 场景。

    问题:脏写在什么场景下产生呢?因为正常写都是有锁的,有锁等待先后顺序。
    : 如果没有锁就会产生脏写