对于MySQL的事务隔离级别,对于悲观锁和乐观锁

所谓隔离级别,就是数据库事务中,保证并发数据读写的正确性,并不是MySQL专有的概念

每种关系型数据库提供了各自特色的隔离级别的实现,在通常定义表示锁为实现单元

常见的MySQL InnoDB引擎为例,是基于MVCC和锁的符合实现,对于MySql事务隔离级别分别分为四个不用的层次

1.读未提交,每一个事务都能看到其他事务没有提交的修改,可能出现脏读

2.读已提交,事务能够看到数据以及提交的修改,但是可能出现不可重复读或者幻象读出现

3.可重复读,保证一个事务多次读取的数据是一致的,这是Inoodb引擎的默认隔离级别

4.并行化事务是串行化,读取要共享读,更新需要获取排它锁

对于悲观锁和乐观锁中,是并发编程的概念,悲观锁认为数据出现冲突的可能性更大,乐观锁认为大部分情况不会出现冲突

Mysql中的悲观锁即为类似 SELECT…FOR UPDATE

乐观锁则是和Java中的AtomicFieldUpdater,利用CAS机制,并不会对数据加锁,通过对比版本号进行乐观锁的判断

对于不同的应用场景,可以构建一下简化的火车余票和购票,就是比较适合使用乐观锁

对于数据库相关领域的学习,

对于数据库设置基础,我们需要了解几个基本范式,各种数据库的基础概念,例如 表 视图 索引 外键 序列号生成器 将实体和依赖关系映射到数据库结构中

每种数据库的设计和实现多少会存在差异,了解不同数据库的差异,了解不同数据的事务隔离借呗

了解常见的SQL语句,掌握基础的sql调优技巧

了解针对高并发等特定场景中的解决方案,读写分离,分库分表等

图片

我们需要了解的是数据库应用工程师相关知识

对于Java呢,我们通常和数据库的交互技术就是JDBC,常见的开源框架建立在JDBC之上,包括JPA Hibernate Mybatis Spring JDBC Template等

Hibernate是著名的O/R Mapping框架之一,也是一个JPA Provider,顾名思义,以对象为中心,体现出了外键约束等复杂的关系,提供强大的持久化能力,利用了Lazy-load等技术提高效率,为了屏蔽数据库的差异,还提供了类似SQL的HQL,生成对应数据到特定的SQL语句

Hibernate的应用非常广泛,但是过度隔离,导致很多弊端,HQL需要额外的学习,而且减少了程序员对SQL的内部控制,而且Hibernate有些隐患

但是MyBatis提供了一些映射的能力,以SQL为中心,开发者侧重于SQL,对于需要大量高性能SQL语句的时候,MyBatis更加实用

而Spring JDBC Template更加接近于SQL层面,Spring本身都需要集成Hibernate 等O/R Mapping框架

对于这些开源框架的学习,需要整体把握主流框架的架构和设计理念,掌握主要流程,SQL解析生成,SQL执行到结果映射流程的发生

掌握映射等部分细节定义和原理

发表评论

邮箱地址不会被公开。 必填项已用*标注