目录
1.事务的概念
事务(Transaction)也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。
2.事务的作用
通过事务的使用,能防止数据库中出现数据不一致现象。如两个银行账户进行转账,涉及到两条更新操作,这两条更新操作只允许全部成功或失败,否则数据会出现不一致的现象。
3.事务的组成
在数据库中,事务由一组相关的DML或SELECT语句,加上一个TPL语句(COMMIT、ROLLBACK)或一个DDL语句(CREATE、ALTER、DROP、TRUNCATE等)或一个DCL(GRANT、REVOKE)语句。
例:如下语句组成两个事务。
INSERT….
UPDATE….
DELETE….
SELECT….
INSERT…
COMMIT;-- 前6条语句,组成第1个事务
UPDATE…
DELETE….
CREATE… ;--后3条语句,组成第2个事务
4.事务的四大特征(ACID)
(1)原子性(Atomicity):事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。
(2)一致性(Consistency):一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。
(3)隔离性(Isolation): 一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。
(4)持久性(Durability): 也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。
5.事务处理的两种方法
(1)用begin,rollback,commit来实现
begin:开启一个事务
rollback:事务回滚
commit:事务提交
(2)直接用set来改变MySQL的自动提交模式
MySQL默认是自动提交的,也就是提交一个sql,就直接提交。可以通过:
set autocommit = 0;-- 禁止自动提交
set autocommit = 1; --开启自动提交
来实现事务的处理。
6.隐式结束
(1)隐式提交:当下列任意一种情况发生时,会发生隐式提交
执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)语句;
执行一个DCL(GRANT、REVOKE)语句;
(2)隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
客户端强行退出、客户端连接到服务器端异常中断、系统崩溃
7.设置保存点
如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。
例子:
use test;
create table test(
test_int int
);
set autocommit = 0;
begin;--开启事务
delete from test;
rollback; --撤销delete
insert into test values(12);
savepoint a;--定义保存点a
insert into test values(34);
savepoint b;--定义保存点b
insert into test values(56);
savepoint c;--定义保存点c
rollback to b;--撤销操作到b,此时test只剩12,34
delete from test where test_int = 34;--此时test只剩12
commit;--提交,最后test只剩12
rollback;--操作已提交,此时回滚无法撤销操作