数据库面试总结

1、什么是事务?数据库事务的四大特性?

事务是对数据库中一系列操作进行统一的回滚或提交的操作,主要用来保证数据的完整性和一致性。

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

一致性:操作执行前后,数据保持一致

隔离性:一个操作在执行结束前,其他人是看不到执行过程的

持久性:一旦操作提交成功后,对数据的改变就是永久的

2、数据库的隔离级别?

脏读:事务B读取了事务A还没有提交的数据

不可重复读:两次事务读取的数据不一致

幻读:一个读事务按照一定条件查询出结果,一个写事务插入了该条件的一条数据,读事务再次查询,结果不一样

3、索引的作用?什么时候不能用索引?

提高查询效率

频繁的更新数据时,不建议用索引,因为同时要更新索引

4、数据库三范式

1NF:属性不可再分,比如,一个字段不能再被分成多个字段

2NF:非主键属性,完全依赖主键属性

3NF:非主键属性不可有传递依赖

5、左连接、右连接

inner join:返回两个表中所有的数据

left  join on:返回左表中的全部,右表中符合条件的数据,没有的以null代替

right join on:返回右表中的全部,左表中符合条件的数据,没有的以null代替

cross join:两个表中的每一条记录都再生成一条记录,比如:A有4条,B有4条,生成16条记录

6、数据库锁的分类?

锁的定义:锁是一种同步机制,用来强行限制资源访问。

悲观锁:在一个事务执行过程中,认为都有可能会对数据进行改变,所以都会加锁。(共享锁、排他锁两种机制)

乐观锁:在一个事务执行过程中,不认为会对数据进行改变,所以不会加锁。但是有更新操作时,会判断数据是否进行了改变,通常使用版本号机制

共享锁:即读锁,在使用select时使用的锁机制。一个事务在读数据时,其他事务也能读数据

排他锁:即写锁,在使用update、delete时使用的锁机制。一个事务在操作数据时,其他事务看不到,更不能对其进行修改

7、为什么要对数据库实行锁机制?

背景:因为数据库并发操作会导致数据不一致

解决目的:多个用户并发操作时,保持数据的一致性

8、什么是死锁?产生的原因?产生的条件?怎么解决?

定义:死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种状态,若无外力作用,它们都无法再继续进行。

原因:因竞争资源(可剥夺和不可剥夺资源)、进程推进顺序非法

条件:

互斥条件(一个资源一次只能被一个进程使用)

请求与保持条件(一个进程因请求资源而阻塞时,对已获得的资源保持不放)

不可剥夺条件(进程已获得的资源,在没有使用完之前不可剥夺,只有进程自己释放)

循环等待条件(多个进程之间形成一种首尾相接的循环关系)

解决:找到进程号,直接kill掉;设置锁的超时时间;指定获取锁的顺序

9、什么是存储过程?如何创建?怎么调用?

存储过程是为了完成特定功能的一组sql语句集,经过编译后存储在数据库中,用户通过名字和给定的参数调用相关的面目存储过程

创建存储过程的语法:

CREATE PROCEDURE 存储过程名称([存储过程的参数列表])  存储过程特性 过程体

存储过程参数列表的格式:([[IN|OUT|INOUT]参数名 参数类型])

IN:输入参数,该参数必须在调用存储过程时指定,在存储过程内部被改变时不能被返回,为默认值

OUT:输出参数,该参数可在存储过程内部被改变并返回

INOUT:输入输出参数,调用时被指定,并且可被改变并返回

调用:

可以用命令CALL调用——call 过程名(过程参数);查看存储过程用SHOW PROCEDURE STATUS LIKE xx%

可以用java程序;

10、什么是视图?

是一种虚拟表,具有和物理表一样的功能,可以对其进行增、删、改、查,视图表一般是一个基本表或多个基本表的列或行的子集,视图表影响基本表,相当于多表查询,但是查询速度更快

11、drop、truncate、delete的区别?

drop直接删除表

truncate删除全部数据,速度快,不可回滚

delete逐行删除数据,可回滚

12、varchar、char的区别?

varchar是变长的,一个英文字符占2个字节,汉字占2个字节

char是固长,一个英文字符占1个字节,汉字占2个字节

13、SQL语言分类

DQL数据查询语言(select)

DML数据操纵语言(insert、update、delete)

DDL数据定义语言(create)

DCL数据控制语言

14、select查询语句中用到的关键词

语法顺序:select--from--where--group by--having--order by

执行顺序:from--where--group by--having--select--order by

from 需要从哪个数据表检索数据

where 过滤表中数据的条件

group by 如何将过滤出的数据分组

having 对上面已经分组的数据进行过滤的条件

select 查看结果集中的哪个列或者列的计算结果

order by 按照什么顺序进行排序

15、having和where的区别?

having只能用在group by之后,对分组后的结果进行筛选。可使用聚合函数

where在group by之前,肯定也在having之前。where条件后的表达式里不可使用聚合函数

16、select语句的关键字

1)别名

select field1 n1 ,field2 n2 from table /select field1 as n1,field2 as n2 from table

2)去重

select distinct name from table

select distinct id , name from table,作用于多列时,需要同时满足两个条件都相同才去重

3)连接

左连接:select a.*,b.* from a left join b on(a.id = b.id),查询出a表中所有数据,和b表中与a表id相同的数据,不符合的以null代替

右连接:select a.*,b.* from a right join b on(a.id = b.id),查询出b表所有数据,和a表与b表id相同的数据,不符合的以null代替

内连接:select a.*,b.* from a inner join b on(a.id = b.id),只查询出a表和b表中相同的数据,不符合的不显示

4)分页  limit

limit i,n

i为查询结果的索引值;n为查询结果返回的数量。从i开始查询数据,返回n条,左闭右开

5)分组函数

avg()、sum()、max()、min()、count()

17、增删改查基本语法

1)插入

      单行

      insert into tablename (field1,field2,field3……) values(value1,value2,value3……)

      insert into tablename set field1 = value1,field2 = value2……

      多行

      insert into tablename (field1,field2,……) values (value1)(value2),(value3)……

      一般情况下都是分开多个单行语句进行插入

2)修改

update tablename set field = value where……

3)删除

delete from tablename where ……

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值