一、数据库隔离级别
四种隔离级别:读未提交,读已提交,可重复读,串行化
脏读,不可重复读,幻读
二、数据库两种锁
1.共享锁,又称S锁、读锁,事务A对一个资源加了S锁后其他事务仍能共享读该资源,但不能对其进行写,直到A释放锁为止。
2.排它锁,又称X锁、写锁,事务A对一个资源加了X锁后只有A本身能对该资源进行读和写操作,其他事务对该资源的读和写操作都将被阻塞,直到A释放锁为止。
三、四种隔离级别都解决了什么问题?具体怎么解决的?
3.1【 读未提交(READ_UNCOMMITED)解决丢失修改】
[ 丢失修改:多个事务同时盯上了一个数据,然后各写各的,谁把谁覆盖了都不知道,总之谁写的快谁就会被覆盖丢失信息。]
为了解决丢失修改的写覆盖问题,未提交读规定:
1.事务A对当前被读取的数据不加锁;
2.事务A开始更新一行数据时,必须先对其加共享锁,直到事务结束才释放;
从第二点就可以看出,事务A在写入数据的时候加了共享锁,其他事务只能读,不能写,所以事务A在写的过程中也就不会被覆盖,从而就解决了丢失修改的问题
然而根据未提交读的原理, 其会引入新的问题:脏读。
3.2【读已提交(READ_COMMITED)解决脏读】
[ 脏读:指别的事务修改后还没提交数据,事务A就可以读到这些数据,比如银行不小心转了一个亿到你的账户,银行人员发现幸好还没提交,此时银行人员马上回滚撤销操作,但你却在其之前取读发现自己账户居然有一个亿,这就是脏