1. 事务(一个完整的业务逻辑,最小的工作单元)
a. 事务中的语句要么全部成功,要么全部失败;
b. 只有DML语句才有事务的说法,即 insert、delete、update;
c. 事务怎么做到多条DML语句同时成功、失败的:
InnoDB存储引擎:提供一组用来记录事务性活动的日志文件,事务执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”中;
d. 提交事务:清空事务性活动的日志文件,将数据全都彻底持久化到数据库表中;标志事务的成功结束;
e. 回滚事务:撤销之前DML的操作,并清空事务性活动的日志文件,标志事务的失败;(只能回滚到上一次的提交点)
d. 默认开始自动提交事务(每条DML语句执行都会提交一次),可以使用 start transaction;语句将自动提交事务的语句关闭;
2. 事务的4个特性:
原子性:事务时最小的工作单元,不可再分;
一致性:在一个事务中,要么同时成功,要么同时失败,保证事务的一致性;
隔离性:事务A和事务B之间分隔开,否则并发操作时会破坏数据安全;
持久性:事务提交,相当于把没有保存到硬盘的数据存储到硬盘上;
3. 事务的隔离性:
读未提交:read uncommitted(最低隔离级别)
事务A可以读到事务B未提交的数据,会读到脏数据,一般不用;
读已提交:read committed(oracle默认的级别)
事务A只可以读到事务B已提交的数据,解决脏读现象;但是存在不可重复读取数据的问题;
可重复读:repeatable read(读取的都是刚开启事务时的数据,事务不结束,读到的永远都是开始的数据)(sql默认级别)
事务A开启后,不管过多久,每一次在事务A中读取到的数据都是一致的。即使事务B修改并提交了,事务A读到的数据还是一致的;
可能会出现幻影,每次读到的数据不够真实;
序列化 / 串行化:serializable(最高隔离级别)
效率最低,解决所有问题,事务排队不能并发;
标签:语句,事务,事务性,DML,提交,MySQL,数据,老杜,days.05 From: https://www.cnblogs.com/LinxhzZ/p/16728433.html