MySQL如何解决脏读、不可重复读、幻读?底层原理?

一、数据库隔离级别

        四种隔离级别:读未提交,读已提交,可重复读,串行化

        脏读,不可重复读,幻读

二、数据库两种锁

        1.共享锁,又称S锁、读锁,事务A对一个资源加了S锁后其他事务仍能共享读该资源,但不能对其进行写,直到A释放锁为止。

        2.排它锁,又称X锁、写锁,事务A对一个资源加了X锁后只有A本身能对该资源进行读和写操作,其他事务对该资源的读和写操作都将被阻塞,直到A释放锁为止。

三、四种隔离级别都解决了什么问题?具体怎么解决的?
3.1【 读未提交(READ_UNCOMMITED)解决丢失修改】

        [ 丢失修改:多个事务同时盯上了一个数据,然后各写各的,谁把谁覆盖了都不知道,总之谁写的快谁就会被覆盖丢失信息。]

        为了解决丢失修改的写覆盖问题,未提交读规定:

        1.事务A对当前被读取的数据不加锁;

        2.事务A开始更新一行数据时,必须先对其加共享锁,直到事务结束才释放;

从第二点就可以看出,事务A在写入数据的时候加了共享锁,其他事务只能读,不能写,所以事务A在写的过程中也就不会被覆盖,从而就解决

你可能感兴趣的:(精通mysql数据库,java,后端,mysql,数据库)