事务(transaction):(ACID)
ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
A(Atomicity):原子性,意味着数据库中的事务执行是作为原子。即不可再分,整个语句要么全执行,要么全不执行
C(Consistency):一致性,即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
I(Isolation):隔离性,事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据
D(Durability): 持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
show variables like '%autocommit%'
手动关闭自动提交set autocommit=false;
虚拟表 临时表 物理表
在JAVA JDBC中事务的处理
将事务由自动改为手动connection.setAutoCommit(false);
try块根据情况进行connection.commit();将虚拟表里面的数据 持久化保存在物理表里面
出现异常,在catch块中connection.rollback();回滚到事务之前的状态,消灭虚拟表,因为虚拟表也要占据空间
一般在commit之后,rollback之后关闭资源(connection、preparestatement...)
begin;//开启事务
insert...
delete...
commit;//提交
数据库事务传播机制(Spring)
上一个事务没有提交的话,上一个事务的数据会在下一个新的事务中自动提交
数据库隔离级别机制:(级别越高,效率越低)
多个客户端,多个并发事务下 数据库使用的隔离级别机制不同 会对数据造成不同影响
并发事务下:
1.脏读(事务A读到事务B未提交的数据)
2.不可重复读(在同一个事务中,不同时刻读到的数据不一样)
3.幻读(查询的时候,突然出现很多新的数据)
1.读未提交 read uncommitted 脏读、不可重复读、幻读
2.读已提交 read committed || oracle sqlserver 避免出现脏读,可能出现不可重复读、幻读
3.可重复读 repeatable read || mysql 避免出现脏读、不可重复读,理论上有可能出现幻读(mysql添加了一种配置MVCC+next-key lock,避免了幻读),mysql默认级别
4.串行化 serializable ( 最高级别 一次只能执行一个事务) 避免出现脏读、不可重复读、幻读
设置数据库隔离级别机制:set globle transaction isolation level 1(2,3,4);