1、数据库的分类及常用数据库
数据库分为关系型数据库和非关系型数据库
关系型:MySQL、Oracle、SqlServer
非关系型:Redis、MemCache、MongoDB、Hadoop
2、简单介绍一下关系数据库三范式
范式就是规范,在设计关系型数据库表时需要遵循的规范。要满足第二范式必须先满足第一范式,要满足第三范式必须先满足第二范式
- 第一范式(1NF):是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。(列数据的不可分割)
- 第二范式(2NF):要求数据库表中的每个行必须可以被唯一区分,为实现区分通常需要为表加上一列,以存储每个行的唯一标识。(主键)
-
第三范式(3NF):要求一个数据库表中不包含在其它表中以包含的非主关键字信息。(外键)
反三范式:有时为了提高效率,可以设置重复或者可以推导出的字段。
3、事务的四大基本特征(ACID)
事务是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。事务必须满足四大特征:原子性、一致性、隔离性、持久性。
- 原子性(Atomicity):表示事务内操作不可分割,要么都成功,要么都失败。
- 一致性(Consistency):要么都成功,要么都失败。后面的失败了要对前面的操作进行回滚。
- 隔离性(Isolation):一个事务开始后,不能受其他事务干扰。
- 持久性(Durability):表示事务开始了,就不能终止。
4、MySQL数据库默认的最大连接数?
为什么需要最大连接数?
特定服务器上面的数据库只能支持一定数目同时连接,这时候我们一般都会设置最大连接数(最多同时服务多少个连接),在数据库安装时都会有一个默认的最大连接数100。
5、说一下MySQL分页和Oracle分页?
为什么需要分页?
有很多数据时,不可能完全显示数据,需要分段显示。
- MySQL:使用limit关键字进行分页,limit offset,size,offset表示从哪个索引开始,size表示取多少条数据。
SELECT* FROM emp LIMIT offset,size
- Oracle:使用伪列 ROWNUM 结合子查询实现,要实现分页查询需要知道两个参数currentPage和lineSize。currentPage表示当前页(cp);lineSize表示每页显示的数据量(ls)。根据当前页(cp)和每页显示的数据量(ls),可以计算出要从数据库中第m条查询到第n条数据的公式:
m=(currentPage-1) * lineSize+1
n=currentPage * linesSize
SELECT *
FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
FROM emp
WHERE ROWNUM<=n) temp
WHERE temp.rn>=m;
6、简单讲一下数据库触发器的使用场景?
触发器,需要有触发条件,当条件满足后执行一些操作。
比如你发了一个动态后自动通知好友,就是在增加动态时增加了一个后触发,然后向通知表中写入条目。
7、简单讲一下数据库存储过程的使用场景?
-
什么是数据库存储过程?
存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 -
数据库存储过程的优点?
(1) 存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度。
(2) 通常,复杂的业务逻辑需要多条 SQL 语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。
(3) 存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量。
(4) 安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。
正是由于存储过程的上述优点,目前常用的数据库都支持存储过程,例如 IBM DB2,Microsoft SQL Server,Oracle,Access 等,开源数据库系统 MySQL 也在 5.0 的时候实现了对存储过程的支持。
- 存储过程的创建和调用?
create procedure 存储过程名字()
begin
SQL语句/逻辑
end;
call 存储过程名字();
或
call 存储过程名字(@参数1,@参数2,@参数3,...);
8、用jdbc怎么调用存储过程?
(1) 加载驱动
(2) 获取连接
(3) 设置参数
(4) 执行
(5) 释放连接
9、简单说一下对jdbc的理解
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

10、写一个简单的jdbc程序
//1. 注册驱动;(只需要注册一次)
//2. 建立连接;
//3. 创建执行的sql语句;
//4. 执行语句;
//5. 处理执行结果;
//6. 释放资源;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.Statement;
public class JdbcTest {
public static void main(String[] args) throws Exception {
test();
}
public static void test() throws Exception {
//1. 注册驱动
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// System.getProperty("jdbc.driver", "con.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver");//推荐方式
//2. 建立连接
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = (Connection)DriverManager.getConnection(url, user, password);
//3. 创建执行的sql语句
Statement st = (Statement) conn.createStatement();
//4. 执行语句
ResultSet rs = st.executeQuery("select * from user");
//5. 处理执行结果
while (rs.next()) {
System.out.println(rs.getObject(1));
}
//6. 关闭连接,释放资源
rs.close();
st.close();
conn.close();
}
}
11、JDBC 中的PreparedStatement相比Statement的好处?
大多数情况下都使用PreparedStatement代替Statement。
(1) PreparedStatement是预编译的,比Statement速度快。
(2) 代码的可读性和可维护性比较好。虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次。
(3)安全性比较高。PreparedStatement可以防止SQL注入攻击,而Statement却不能。
12、数据库连接池的作用
(1) 限定数据库连接的个数,不会导致由于数据库连接过多导致系统运行缓慢或崩溃。
(2) 数据库连接池不需要每次都去创建或销毁,节约了资源。
(3) 数据库连接池不需要每次都去创建,响应时间更快。