一、什么是事务
1.概念
事务是数据库提供的一种手段,功能。针对一系列dml语句(insert,update,selete)
保证这组dml语句,要么都执行,要么都不执行。
2.事务实现的原理
开启事务。提供缓存。
start transaction;
insert 并没有真正持久化到数据文件。
delete 并没有真正持久化到数据文件
提交后真正持久化到数据库中。
commit;
回滚
rollback;
3,mysql中的事务
默认情况下,mysql是一条语句一个事务,自动提交(不报错的前提下)
二、事务的四个特征ACID
原子性(Atomicity):整个事务中的所有操作,必须作为一个单元全部完成(或者全部取消)要么都执行,要么都失败。
一致性(Consistency):在事务开始之前和结束之后,数据库都保持一致状态
隔离性(Isolation):多个客户端,每个客户端和其他客户端的事务是隔离性。
一个事务不会影响其他事务的运行
持久性(Durability):在事务完成以后,该事务对数据库所作的更改将持久化地保存在数据库之中,并不会被回滚
三、事务的隔离级别
1.四种隔离级别
每个客户端事务的相互隔离的程度不一样,影响不一样。级别越高,资源利用越低。
(MySQL默认三挡起步,Oracle默认二档起步)
READ-UNCOMMITTED 未提交读 A 可以读到 B 的未提交的数据 B rollback 脏读
READ-COMMITTED 已提交读 A 可以读到 B 的提交的数据 A 不可重复读
REPEATABLE-READ 可重复读 A 读到的都是一样的 B 幻读
SERIALIZABLE 序列化 A 一个客户独占。 B 要排队, A B
补充:
2.设置事务隔离级别
(1)设置相应级别
set global transaction isolation level read uncommitted;
set global transaction isolation level read committed;
set global transaction isolation level repeatable read;
set global transaction isolation level serializable ;
(2)退出数据库,重新进入,图例为未提交读read uncommitted级别;
3.查看事务的隔离级别
SELECT @@global.tx_isolation;
4.演示
打开两个窗口登录MySQL来演示A和B
进入数据库,使用一个数据库(自选,此处使用test数据库)
use test;
(1)在B中创建student表
drop table if exists student;
create table student(
-> name varchar(255),
-> age int
-> );
B中查看student表
desc student;
(2)在B中插入数据
insert into student(name,age) values('zhangsan',20);
insert into student(name,age) values('lisi',30);
A中查看B
(3)B开启事务后继续操作数据库
start transaction;
insert into student(name,age) values('zw',50);
insert into student(name,age) values('wlw',60);
在A中查看B,虽然B没有提交事务,但此时的隔离级别A可以查看B修改后的数据库表单