失效链接处理 |
《我想进大厂》面试总结 PDF 下载
本站整理下载:
相关截图:
主要内容:
那你知道什么是覆盖索引和回表吗?
覆盖索引指的是在⼀次查询中,如果⼀个索引包含或者说覆盖所有需要查询的字段的值,我们就称之为
覆盖索引,⽽不再需要回表查询。
⽽要确定⼀个查询是否是覆盖索引,我们只需要explain sql语句看Extra的结果是否是“Using index”即
可。
以上⾯的user表来举例,我们再增加⼀个name字段,然后做⼀些查询试试。
锁的类型有哪些呢
mysql锁分为共享锁和排他锁,也叫做读锁和写锁。
读锁是共享的,可以通过lock in share mode实现,这时候只能读不能写。
写锁是排他的,它会阻塞其他的写锁和读锁。从颗粒度来区分,可以分为表锁和⾏锁两种。
表锁会锁定整张表并且阻塞其他⽤户对该表的所有读写操作,⽐如alter修改表结构的时候会锁表。
⾏锁⼜可以分为乐观锁和悲观锁,悲观锁可以通过for update实现,乐观锁则通过版本号实现。
你能说下事务的基本特性和隔离级别吗?
事务基本特性ACID分别是:
原⼦性指的是⼀个事务中的操作要么全部成功,要么全部失败。
⼀致性指的是数据库总是从⼀个⼀致性的状态转换到另外⼀个⼀致性的状态。⽐如A转账给B100块钱,
假设中间sql执⾏过程中系统崩溃A也不会损失100块,因为事务没有提交,修改也就不会保存到数据库。
explain select * from user where age=1; //查询的name⽆法从索引数据获取
explain select id,age from user where age=1; //可以直接从索引获取
1
2
隔离性指的是⼀个事务的修改在最终提交前,对其他事务是不可⻅的。
持久性指的是⼀旦事务提交,所做的修改就会永久保存到数据库中。
⽽隔离性有4个隔离级别,分别是:
read uncommit 读未提交,可能会读到其他事务未提交的数据,也叫做脏读。
⽤户本来应该读取到id=1的⽤户age应该是10,结果读取到了其他事务还没有提交的事务,结果读取结
果age=20,这就是脏读。
|