博主马上要面对几家公司的面试,故自己准备了点面试题,仅供参考!
1,三范式?
答:每个属性都不可再分,属性完全依赖于主键,第三范式就是属性不依赖于其它非主属性。
答:每个属性都不可再分,属性完全依赖于主键,第三范式就是属性不依赖于其它非主属性。
2,如何理解超键、候选键、主键、外键的含义?
超键有无关属性,主键是唯一且不能再分,外键是主键的引用,主键是在候选键中产生的
超键有无关属性,主键是唯一且不能再分,外键是主键的引用,主键是在候选键中产生的
3,什么是存储过程?有哪些优缺点?
存储过程是一个预编译的有名称的代码块。
优点:执行效率比较高,降低网络通信量,提高通信速率,一定程度上确保数据安全
缺点:开发过程中维护有一定难度。
存储过程是一个预编译的有名称的代码块。
优点:执行效率比较高,降低网络通信量,提高通信速率,一定程度上确保数据安全
缺点:开发过程中维护有一定难度。
4,存储过程和函数区别?
存储过程相当于业务层。函数相当于dao层。业务层中可以调用多个dao,那么在存储过程的代码中可以调用
多个函数,函数都是有返回值的。
存储过程相当于业务层。函数相当于dao层。业务层中可以调用多个dao,那么在存储过程的代码中可以调用
多个函数,函数都是有返回值的。
5,索引是什么(可以理解为字典的索引)?有什么作用以及优缺点?
索引是对数据库表中一或多个列的值进行排序的结构,是帮助SQL高效获取数据的数据结构。
MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引
索引是对数据库表中一或多个列的值进行排序的结构,是帮助SQL高效获取数据的数据结构。
MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引
好处就是提高速度。缺点就是需要占物理和数据空间
6,什么是事务?
事务(Transaction)是并发控制的基本单位。
事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务(Transaction)是并发控制的基本单位。
事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
7,事务的四大特性?ACID
原子性(Atomicity)[同时成功或失败],一致性(Consistency)[数据守恒],
隔离性(Isolation)[并发],持久性(Durability)[commit一旦提交不能再回滚]
8,隔离级别有哪几种?
① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
③ Read committed (读已提交):可避免脏读的发生。
④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。
最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低
9,MySQL数据库中默认的隔离级别?
答:为Repeatable read (可重复读)
答:为Repeatable read (可重复读)
10,oracle的隔离级别有几种?
答:2种 。
Oracle只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,
其中默认的为Read committed级别
答:2种 。
Oracle只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,
其中默认的为Read committed级别
11,乐观锁和悲观销
乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性
乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性
12,使用索引查询一定能提高查询的性能吗?为什么
索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,
索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O.
因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.
使用索引查询不一定能提高查询性能
索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,
索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O.
因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.
使用索引查询不一定能提高查询性能
13,简单说一说drop、delete与truncate的区别
truncate 和 delete 只删除数据不删除表的结构(定义)
drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);
依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
truncate 和 delete 只删除数据不删除表的结构(定义)
drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);
依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
14,DML、DDL、DCL的区别?
DML(data manipulation language)数据操纵语言:
就是我们最经常用到的 SELECT、UPDATE、INSERT、DELETE。 主要用来对数据库的数据进行一些操作
DDL(data definition language)数据库定义语言:
其实就是我们在创建表的时候用到的一些sql,比如说:CREATE、ALTER、DROP等。
DDL主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上
DCL(Data Control Language)数据库控制语言:
是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。
15,什么是视图?以及视图的使用场景有哪些?
视图是一种虚拟的表,对视图的修改不影响基本表,
(只暴露部分字段给访问者,所以就建一个虚表,就是视图。
查询的数据来源于不同的表,而查询者希望以统一的方式查询,
这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,
不必考虑数据来源于不同表所带来的差异)
视图是一种虚拟的表,对视图的修改不影响基本表,
(只暴露部分字段给访问者,所以就建一个虚表,就是视图。
查询的数据来源于不同的表,而查询者希望以统一的方式查询,
这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,
不必考虑数据来源于不同表所带来的差异)