数据库常见面试题

一 数据库的隔离级别有几个?

1.读未提交,最低级别

2.读已提交,可以防止脏读

3.可重复读,可以防止脏读、不可重复读

4.串行话,可以避免脏读、不可重复读、幻读

什么是脏读、不可重复读、幻读????

脏读就是一个事务读取到另外一个事务未提交的数据,可能引发数据库中的数据回滚。

不可重复读就是一个事务先读取一次数据,另一个事务修改数据,第一个事务读取数据发现不一致了。

幻读就是两个事务操作数据库,第一次读取数据和第二次的数据不一样,缺少了或者增加了数据。

不可重复读重在数据被修改,幻读重在对数据进行了添加或删除。

二 数据库存储的方式有几种

1.冷备份

定期的将数据库中的数据进行转储

2.热备份

当主数据库宕机,从数据库从主数据库发生问题之前的二进制日志中备份

3.双机热备

数据库互为主从,提升数据库的高可用,当一个数据库发生问题后另一个数据库立马启动,防止发生雪崩现象。

三 Sql注入是什么,怎么防止?

Sql注入就是当我们的sql语句是拼接的方式的时候,别人可以通过添加全真操作读取数据库中的所有数据,数据库数据不安全 例如:"select * from students where id = "+id ,其中的id是一个参数,用户传入 1 or 1=1,那么就可以拿到所有数据。正确应该是"select * from students where id = ?",用?进行占位。

防止sql注入用的是占位符的方式,主要就是调用prepareStatement对象,先把sql框架提交给数据库服务器,咱把参数单独提交给数据库。

四 sql优化

1.尽量不要使用*,使用字段名

2.用in代替or

3.尽量不要使用子查询,使用联接查询的方式,小表join大表

4.尽量不要使用order by

5.索引不能超过6个

6.尽量使用中间表(两个表之间的关系表)

7.使用explain查询sql语句的性能

五 事务

事务是数据库操作的逻辑单位,它的特性是ACID。

原子性:要么全部执行,要么全部不执行

一致性:操作数据后,数据库也要发生变化,比如银行存钱,存入后,银行卡余额也要改变

隔离性:一个事务操作数据库的时候,另一个事务不能够操作

持久性:存储在数据库中的数据长期有效

六 什么时候使用where,什么时候使用having

逻辑:

1.如果某字段a在select的后边,通过a进行条件判断,可以使用where或者having

2.如果某字段a不在select的后边,通过a进行条件判断,只能使用where

3.如果a字段在selecet的后边,并且a字段使用聚合函数变成b字段了,通过b进行条件判断,只能用having

1.

select name,age from user where age >10;

select name,age from user having age >10;

2.

select name from user where age >10;

3.

select name ,count(name) as c from user  group by name having c > 1

七 索引的失效的情况(模数空算最快)

先讲清楚索引的作用是提高查询速度,相当于书里面的目录,方便我们快速找到指定的东西。

索引必须是经常不变化的数据,或者放在where、order by 、group by后边。

模:模糊查询like的%在前

数:数据类型错误--定义的是varchar,按照int类型查询 select* from a where id="1"

空:索引存在null值

算:索引参与运算

最:复合索引里面没有遵循最左原则(a、b、c) where a or b where a or b or c才可以

快:全表查询比索引查询快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值