一.事务
1.什么是事务
- 事务是由一条或多条SQL语句组成的逻辑执行单元, 可以比喻成一个容器, 里面放的就是一堆SQL语句, 这些语句要么全部执行成功, 要么一个都无法执行成功(原子性)
2.为什么使用事务
- 对数据进行一系列的操作的时候, 为了防止这些操作中部分操作成功而另一些操作失败, 从而造成数据的不正确性, 这个时候我们就需要使用事务将其回滚到原来的状态
3.事务的四大特征 (ACID)
- 原子性(Atomicity) : 事务是一段程序的最小执行单元, 不可再分(就如同自然界的原子不可再分), 所以事务中的操作要么都成功, 要么都失败
- 一致性(Consistency) : 事务的执行, 必须使数据库从一个一致性状态, 变成另一个一致性状态, 一致性是通过原子性来保证的
- 隔离性(Lsolation) : 各个事务的执行互不干扰, 任意一个事务的内部操作对其他并发的事务, 都是隔离的; 也就是说 : 并发执行的事务之间不能看到对方的中间状态, 并发执行的事务之间不能相互影响
- 持续性(Durability) : 也叫"持久性", 指事务一旦提交, 对数据的任何改变都记录到永久存储器中, 通常是物理数据库
4.如何使用事务
- 关键字
🍎开启事务
begin; # 或者下面的语句
start transaction;
🍎事务回滚(回滚到之前的状态,并关闭事务)
rollback; # 回滚 + 关闭
🍎事务提交(将修改提交,并关闭事务)
commit; # 提交 + 关闭
由上面关键字可以看出, 一个事务的开始对应一个回滚或者提交, 之后就需要重新开启事务
- 银行余额示例
🍎先创建一个用户余额表并插入记录
create table user(
id int primary key auto_increment,
name varchar(16) not null,
balance int not null
);
insert user(name,balance) value
("shawn",150000),
("song",20000),
("xing",520022),
("hai",10000);
select * from user; # 查看一下所有记录
🍎开启事务
begin; # 或者 start transaction;
🍎更新记录
update user set balance=100 where name="shawn";
update user set balance=100 where name="song";
update user set balance=100 where name="xing";
update user set balance=200 where name="hai";
select * from user; # 查看一下是否修改成功
🍎事务回滚
rollback; # 回滚之后, 该事务就关闭了
select * from user; # 查看一下是否回滚到原来的数据
🍎再开启一个事务
begin;
🍎再次对数据进行更新
update user set balance=200 where name="shawn";
update user set balance=200 where name="song";
commit; # 事务提交, 并关闭了该事务
select * from user; # 查看数据的变化
rollback; # 再次使用事务回滚将不在起作用, 因为事务已经关闭了
select * from user;