数据库原理

本文介绍了数据库设计的三大范式,强调了减少冗余和提高查询效率的重要性。同时,讲解了MyBatis中防止SQL注入的方法及#与$的区别。此外,详细阐述了事务的四大特性(ACID)和不同隔离级别,以及它们在解决并发问题中的作用。
摘要由CSDN通过智能技术生成

三大范式:
    1. 列不可分
    2. 要有主键
    3. 不可存在递归依赖


比如商品表里面关联商品类别表,那么只需要一个关联字段product_type_id即可,其他字段信息可以通过表关联查询即可得到。

如果商品表还存在一个商品类别名称字段,如product_type_name,那就属于存在传递依赖的情况,第三范式主要是从空间的角度来考虑,避免产生冗余信息,浪费磁盘空间。

反范式设计(第三范式)
原因1. 提高查询效率(读多写少)


预处理解决方案:采用PreparedStatement对象,而不是Statement对象

MyBatis如何解决SQL注入的问题?采用#
MyBatis的#和$的差异,#可以解决SQL注入,而?号不能解决

JDBC对事务的操作是基于Connection来进行控制的
try{
connection.setAutoCommit(false);
...
connection.commit();
} catch (Exception e){
    try{
    } catch (SQLException e1){
        e1.printStackTrace();    
    }
}

事务:
原子性是基础,要么一起成功要么一起失败
隔离性是手段,一个事务的执行不被其他事务干扰,并发执行的各个事务之间不能相互干扰
一致性是约束条件,数据库中的数据在事务操作前后都必须满足业务规则约束
持久性是目的,事务提交结果便是永久性的
简称ACID

事务的隔离级别(解决并发情况下,数据安全问题):
    1. READ UNCOMMITTED 读未提交,脏读,不可重复读,幻读有可能发生(基本不会使用,不安全)
    2. READ COMMITTED读已提交,可避免脏读的发生,但不可重复读,幻读有可能发生(Oracle默认)
    3. REPEATABLE READ 可重复读,可避免脏读,不可重复读发生,但幻读有可能发生(MySQL默认)
    4. SERIALIZABLE串行化,可避免脏读,不可重复读,换的发生,但性能会影响比较多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值