数据库方面面试问题
1.数据库分为关系型数据库和非关系型数据库。
关系型Mysql oracle SqlServer
非关系型:redis,memcache,mogodb,hadoop
2.关系型数据库的三范式?
范式就是规范,就是关系型数据库在设计表时,要遵守的三个规范。要想满足第二范式,必须先满足第一范式,要想满足第三范式,必须先满足第二范式
第一范式:列数据不可以分割
第二范式:主键
第三范式:外键
- 第一范式(确保每列保持原子性)
- 第二范式(确保表中的每列都和主键相关)
- 第三范式(确保每列都和主键列直接相关,而不是间接相关)
反三范式,有的时候为了查询效率,可以设置重复的字段,订单和订单项(单价)。
3.事务地四个基本特性ACID
事务是并发控制的单位,是用户定义的一个操作序列,这些操作要么都不做,是一个不可分割的工作单位。
原子性:事务内操作不可分割,要么都成功,要么都失败
一致性:要么都成功,要么都失败,后面的失败了要对前面的操作进行回滚
隔离性:一个事务开启后,不能受其他事务干扰
持久性 :表示事务对数据库的影响是永久的。
4.Mysql 数据库的默认最大连接数?
为什么需要最大连接数?
特定服务器上的数据库只能支持一定数目同时连接,这时候需要我们设置最大连接数(最多同时服务多少连接),在数据库安装时都会有默认的最大连接数100
5.mysql的分页
为什么需要分页?
在很多数据时,不可能完全显示数据。进行分段显示。
Mysql是使用关键字limit来进行分页的,limit offset size表示从多少索引 去多少位。
Oracle 分页思路:要使用三层嵌套查询。
Mysql
String sql = “select * from students order by id limit ”+pageSize*(pageNum-1)+”,”+pageSize;
6.数据库的触发器的使用场景
触发器需要有触发条件,当条件满足后做什么操作。比如在社交网上,你发表了一个日志,会自动通知好友。其实就是一个后触发。再向通知表写入条目,因为触发器效率高。
每插入一个帖子,都希望版面表中的最后发帖时间,帖子总数字段进行同步更新,用触发器效率就很高。
7.数据库存储过程优点
1.存储过程只在创建时编译,以后执行都不需要编译。而一般的sql语句每执行一次就编译一次,因此存储过程提高了效率。
2.复杂业务需要多条sql语句。这些语句需要从客户机发送到服务器,会产生大量网络传输。如果将这些操作存储到存储过程中,客户机和服务器之间的网络传输就会大大减少,降低了网络负载。
3.存储过程可以重复使用,减少开发人员工作量
4.安全性高
定义存储过程:
Create procedure insert_student(_name varchar(50),_age int ,out_id int)
Begin
Insert into student values(null,_name,_age);
Select max(stuId) into _id from student;
End;
调用
Call insert_student(“wfz”,23,@id);
Select id;
8.怎么用jdbc 调用存储过程?
贾涟欲执事
1.加载驱动
2.获取连接
3.设置参数
4.执行
5.释放链接
9.简单说一下你对jdbc的理解
Java database connection, java 数据库连接,数据库管理系统是很多的,每个数据库管理系统支持命令是不一样的
Java只定义接口,让数据库厂商实现接口,对于我们而言,需要我们导入对应厂商的实现即可。然后以接口的方式进行调用。
10.简单写一个JDBC的程序,写一个访问Oracle数据的程序
贾涟欲执事
1.加载驱动
(com.mysql.jdbc.Driver,com.oracle.jdbc.Driver)
2.获取连接
(DriverManager.getConnection(uri,userNmae,userPassword))
3.设置参数
Statemeent,PreparementStatement
Cstmt.setXXX(index,value);
4.执行
executeQuery,executeUpdate
5.释放连接(释放连接需要从小到大,必须放到finally中)
11.JDBC PreparedStateMent相比于StateMent的好处
1.preparedStateMent是预编译的,比StateMent速度快
2.代码的可读性和维护性
3.安全性
12.数据库连接池的作用
1.限定了数据库连接的个数,不会导致由于数据库连接过多而导致系统运行缓慢或崩溃。
2.数据库连接不需要每次创建或销毁,节省资源
3.数据库连接不需要每次创建,响应时间快