• Java面试题复习笔记(数据库)


    1.数据库分类?

    关系型数据库和非关系型。

    常用关系型:Myspl、Oracle、SQLServer

    非关系型:Redis、Hadoop、Memcache、Mogobd

    2.关系数据库三范式?

    范式就是设计数据库表时要遵循的规范。

    要想满足第二范式必须先满足第一范式,要想满足第三范式必须先满足第二范式。

    第一范式(1NF):数据表的每一列都是不可分割的数据项,同一列中不能有多个值(或者说不能有两个表示属性相同的列),即实体中的某个属性不能有多个值或者不能有重复属                                  性。

    第二范式(2NF):数据表中的某一行都必须可以被唯一区分。为实现区分通常需要在表中加一列以存储各个实例的唯一标识(主键)。

    例如:用户表Person中的主键personID,每个person的name,gender,age都有可能跟其他单位相同,但是ID绝不相同,所以id就是作为唯一区分的主键标识。

    第三范式(3NF):一个数据库中不包含在其他表中也包含的非主键信息。(外键)

    例如:用户表Person中有personID(主键),name(非主键),而购物车表中不能包含(person_name)。

    反三范式:有的时候为了提高效率,可以设置重复后者可以推导出来的字段。

    例如:订单总价和订单项单价,有了总价列后每加入一项就改变总价,以后再需要使用总价字段时直接取该列数值即可,不需要每次都计算所有单价总和。

    3.事务四个基本特征(ACID)特性?

    事物是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。

    例如:一次转账,必须A账号扣款成功,B账号加钱成功,才算真正的转账成功。

    原子性:事务操作不可分割,要么都成功,要么都失败。

    一致性:要么都成功,要么都失败,后面的失败了要对前面的操作进行回滚。

    隔离性:一个事务开始后不能受其他事务干扰。

    持久/续性:事务开始了就不能终止。

    4.Myspl数据库默认的最大连接数?为什么需要最大连接数?

    特定服务器上面的数据库只能支持一定数目同时连接,这是需要我们设置最大连接数。子啊数据库安装时都会有一个默认的最大连接数,100。

    5.Mysql的分页?Oracle的分页?为什么需要分页?

    很多数据库不能同时显示很多数据,所以需要分页。

    Mysql:使用关键字limit(limit offset,size表示从多少索引去多少位)

    String sql = "selec * from students order by id limit" + pageSize * (pageNumber - 1) + "," + pageSize;

    Oracle:大部分情况下是记不住的,说思路——要使用三层嵌套查询。

    6.触发器的使用场景?

    需要有触发条件,当条件满足后执行什么操作。

    例如朋友圈发布动态,QQ发布日志会自动通知好友。

    7.数据库存储过程的使用场景?

    存储过程具有一下优点:

         (1)存储过程旨在创建的时候编译,以后每次执行的时候不需要编译,而一般的sql语句每执行一次就编译一次,因为使用存储过程可以大大提高数据库执行速度。

         (2)通常复杂的业务逻辑需要多条sql语句。这邪恶语句要分别从客户机发送到服务器,当客户机和服务器之间操作次数过多时,将产生大量网络传输。如果这些操作再存                          储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。

         (3)存储过程创建一次就可以重复使用,可以减少数据库开发人员的工作量。

         (4)安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用EXECUTE权限调用存储过程,无需拥有访问底层数据库对象的显式权限。

    定义存储过程:

    create procedure insert_Student(_name  varchar(50),
                                                    _age     int,
                                                    _out_id int )
    begin
            insert into student value( null, _name, _age );
            select max(stuId) into _id from student;
    end;
    
    call insert_Student( 'wfz', 23, @id );
    select @id;

    8.用Jdbc调用存储过程?

    加载驱动------->获取连接------->设置参数------->执行------->获取连接

    9.对Jdbc的理解?

    Java  DataBase  Connection(java数据库连接)

    数据库管理系统是有很多,每个系统支持的命令也是不一样的。过程如下:

    Java只定义接口,让数据库厂商自己实现接口,对于我们开发者而言,只需要导入对应厂商的实现即可,然后以接口的方式进行调用(Mysql+mysql(驱动实现)+Jdbc),

    如下图:

    10.Jdbc中PreparedStatement相比Statement的好处?

    (1)PreparedStatement是预编译的,速度比Statement快

    (2)虽然代码会多几行,但是代码的可读性和可维护性更强。

    例如:

    Statement:
    stmt.executeUpdate( "insert into tb_name( col1,col2,...)
    values( "" + var1 + "" + var2 +...)" );
    
    PreparedStatement:
    perstmt = con.preparedStatement( "insert into tb_name( col1, col2, ...) values( ?, ?, ...)" );
    perstmt.setString( 1, var1);
    ...
    perstmt.executeUpdate();

    (3)安全性,PreparedStatement可以防止SQL注入攻击,而Statement不能。

    11.数据库连接池的作用(与线程池类似)?

  • 相关阅读:
    Gradle 修改 Maven 仓库地址
    返回到上一页的html代码的几种写法
    Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
    MyBatis传入多个参数的问题
    8 个最优秀的 Android Studio 插件
    Html中隐藏a标签
    js中获取jsp中的参数
    同一个页面里的JS怎样获取jsp从别的页面获取的参数
    《Android源码设计模式解析与实战》读书笔记(一)
    HDU ACM 1068 最大独立集
  • 原文地址:https://www.cnblogs.com/edward-life/p/10557575.html
Copyright © 2020-2023  润新知