一、数据库引擎 Engine = Innodb 时才支持事务
ACID原则:
- A(原子性Atomicity)不可分割性,要么全成功,要么全失败
- C(一致性Consistency)在事务开始之前和结束之后,数据库完整性没有被破坏
- I (隔离性Isolation)允许多个并发事务同时读写,防止交叉执行造成的数据不一致
- D(持久性Durability)事务结束后,对数据的修改是永久的,系统故障宕机不会造成数据丢失
隔离级别:
- 读未提交(Read Uncommitted):会出现脏读,也就是可能读取到其他会话中未提交事务修改的数据,性能最好也最不安全
- 读已提交(Read Committed):只能读取到已经提交的数据,但不可重复读。Oracle默认该级别
- 可重复读(Repeated Read):在同一个事务内的查询都是事务开始时刻一致的,在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读。mysql(InnoDB)默认级别。
- 串行化(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞,最安全但性能也最差
二、MySql集群如何同步数据
主从:主负责增删改查,从负责同步数据,读写分离。主服务建立二进制binlog文件,每当产生语句变化或磁盘变化时,就写入日志文件。从服务读取主服务的binlog文件,转成从服务的relaylog,同步data。主服务建立授权复制账号,从服务利用账号监听主服务的变化。
主主:两服务互相监听对方的变化,一方变化,另一方同步。两服务同时建立二进制binlog文件和授权账号,将发生的变化写入日志。
三、Mybatis和Hibernate区别
Hibernate五大核心接口:
- configration 配置并启动hibernate
- SessionFactory 初始化hibernate
- Session 持久化对象以及CRUD操作
- Transaction 负责事务
- Query和Criteria 数据库查询
优点:基于ORM映射,通过操作对象自动生成sql(hql),低侵入,跨数据库移植性好,支持二级缓存(一级:session,内置每个类有唯一的OID;二级:SessionFactory 生命周期与应用程序一直,或者整合第三方缓存)
缺点:调优难,批量更新问题,学习门槛高
mybatis
优点:半ORM映射,轻量级,易学门槛低,容易调优
缺点:数据库移植性差,二级缓存不佳(一级:默认sqlsession;二级:mybatis-config.xml配置cacheEnable value=true开启。)
未完待续....