1.mysql隔离级别对应的实现原理?
答:1.读未提交
对于修改的项加排它锁,直到事务结束释放;没有快照读,只能读最新版本的数据。
2.读已提交
对于修改的项加排它锁,直到事务结束释放;有快照读,快照的粒度是语句级。
3.可重复读
对于修改的项加排它锁,直到事务结束释放;有快照读,快照的粒度是事务级。
MVCC的全称是“多版本并发控制”。
3.串行化
2.解释一下mysql共享锁,排他锁?
答:共享锁又称读锁 是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。在查询语句后面增加LOCK IN SHARE MODE,MySQL 就会对查询结果中的每行都加共享锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞。其他线程也可以读取使用了共享锁的表,而且这些线程读取的是同一个版本的数据。
排他锁又称写锁、独占锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据在查询语句后面增加FOR UPDATE,MySQL 就会对查询结果中的每行都加排他锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞。
3.手写sql语句(完整的面试流程这边都会让你手写一个相对复杂一点的sql)
1.编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小的那个。
答:DELETE p1 FROM email p1, email p2 WHERE p1.Email = p2.EmailAND p1.Id > p2.Id;
网友评论