mysql常考面试题

1.什么时候索引会失效?

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

2.对于多列索引,不是使用的第一部分,则不会使用索引

3.like查询是以%开头,索引失效;以%结尾,索引有效

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

6.在where使用<>、in、not in、not exist 也会使索引失效。

2.数据库事务的四个特性(ACID)

1、原子性(Atomicity)

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

2、一致性(Consistency)

一致性是指 事务执行前后 数据库的数据都必须处于一致性、完整性的状态。不会因为不同事务同时操作或者数据库宕机,导致数据库数据不完整不一致。

很多资料里将一致性描述为:“事务开始和结束之间的中间状态不会被其他事务看到”。

3、隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。mysql数据库支持四种隔离级别。

4、持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

3.数据库的四种隔离级别 

mysql具有4中隔离级别:读未提交、读已提交、可重复读、序列化。

 事务需要隔离的原因

更新丢失(Lost update):(1类).事务A撤销时,把已经提交的事务B的更新数据覆盖了。(2类)事务A覆盖事务B已经提交的数据,造成事务B所做的操作丢失。总结:更新丢失的原因是没有对行加锁,事务可以并发访问修改数据。

脏读(Dirty Read):A事务发生于B事务执行过程中,B事务执行回滚,那么A会读取到B事务没有正式提交的数据,这是脏读数据。

不可重复读(Non-repeatable Reads) :A事务读取某一数据后,B事务对其做了修改,当A事务再次读该数据时得到与前一次不同的值。 

幻读 (Phantom Read):指两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中。一般情况下,幻读不需要处理,如果特别需要处理,可以使用序列化隔离级别(会锁住整个表,很影响并发性)。

它们的区别简单来说是:
脏读:查询读到其他事务没有提交的数据。(没有提交的)
不可重复读:两次查询中被其他事务修改了(已经提交的)。
幻读:指的是两次查询中,其他事务插入了新数据。(新增或者删除数据)

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

mysql的默认隔离级别是可重复读(REPEATABLE READ),它的原理在这

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值