指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生
指的事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整的数据空间
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果
事务之间的相互影响分为几种,分别为:
隔离 | 说明 | 效果 |
---|---|---|
read uncommitted | 读取尚未提交的数据 | 不解决脏读 |
read committed | 读取已经提交的数据 | 可以解决脏读 |
repeatable read | 重复读取 | 可以解决脏读 和 不可重复读 —mysql默认的 |
serializable | 串行化 | 可以解决 脏读 不可重复读 和 虚读—相当于锁表 |
事务隔离级别的作用范围分为两种:
show global variables like '%isolation%';
select @@global.tx_isolation;
show session variables like '%isolation%';
select @@session.tx_isolation;
set global transaction isolation level read committed;
set @@global.tx_isolation='read committed'
注意:设置全局隔离级别后要退出重新登录才会生效,或者把会话级别也给成一样的,否则,在当前会话不会生效。
set session transaction isolation level repeatable read;
set @@session.tx_isolation='read committed';
BEGIN 或 START TRANSACTION:显式地开启一个事务。
COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的。
ROLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。
ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点。
案列
create database csgo;
use csgo;
create table class(
id int(10) primary key not null,
name varchar(40),
money double
);
insert into class values(1,'A',1000);
insert into class values(2,'B',1000);
select * from class;
begin;
update class set money= money -100 where name='A';
select * from class;
commit;
quit
mysql -uroot -pabc123
use csgo;
select * from class;
begin;
update class set money= money +100 where name='A';
select * from class;
rollback;
quit
mysql -u root -p
use csgo;
select * from class;
begin;
update class set money= money +100 where name='A';
select * from class;
savepoint S1;
update class set money= money +100 where name='B';
select * from class;
savepoint S2;
insert into class values(3,'C',1000);
select * from class;
rollback to S1;
select * from class;
set autocommit=0; #禁止自动提交
set autocommit=1; #开启自动提交,Mysql默认为1
show variables like 'autocommit'; #查看Mysql中的AUTOCOMMIT值