事务------一组DML(插入,删除,更新)语句的集合

MySQL数据库InnoDB存储引擎支持事务
MySQL的事务默认是自提交模式,如果想要开启事务:
1.开启:begin命令开始
2.结束:rollback结束

事务的特性

1.原子性:事务中包含的所有操作要么都做,要么都不做,保证数据库一致。
2.一致性:数据库中的数据在事务操作前和事务处理后必须都满足业务规则的约束。
3.隔离性:数据库允许多个并发事务同时对数据进行读写和修改的能力,,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
4.持久性:事务处理结束后,对数据的修改就是永久的,即便系统发生故障也不会丢失

事务语句

1.begin开启;rollback显示结束。
2.commit代表提交事务,使得已对数据库做的所有修改成为永久性
3.rollback代表回滚事务,撤销正在进行的所有未提交的修改

例子:
select * from t;
begin;
insert into t (id.name) values (4,'dd');
commit;
rollback;

truncate和delete的区别

清空表内的数据
1.truncate是DDL语句(定义语言)操作,不能被回滚+清空表的自增属性(例如:id,从1开始记录)
2.delete是DML语句,可以回滚

事务的隔离级别

1.读+未提交:RU (生产环境不建议使用)
在其中一个事务中,可以读取到其他事务未提交的数据变化;
读取其他会话还没提交的事务------脏读

2.读+已提交:RC
Oracle默认的事务隔离级别
在其中一个事务中,可以读取到其他事务已经提交的数据变化
允许幻读现象发生
不可重复读

3.可重复读:RR
MySQL默认的事务隔离级别
在其中一个事务中,直到事务结束前,都可以反复读取到事务刚开始时看到的数据,并不会一直发生变化。
避免脏读不可重复读幻读的发生

4.串行: (生产环境不建议使用)
在每个读的数据行上都需要加表级共享锁

脏读、不可重复读、幻读、可重复读现象

1.脏读
*读+未提交:RU *

一个事务读取到了其他事务还没有提交的数据

2.不可重复读&&&幻读
读+已提交:RC

不可重复读:在其中一个事务中,读取到了其他事务针对旧数据的修改记录。
幻读:在其中一个事务中,读取到了其他事务新增的数据(常见于插入insert语句)

3.可重复读
可重复读:RR