Transaction Control Language 事务控制语言

事务:

一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

案例:转账

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
柯南	1000
秀一 1000

update 表 set 柯南的余额=500 where name='柯南'
意外
update 表 set 秀一的余额=1500 where name='秀一'

事务的特性:
ACID
原子性:一个事务不可再分割,要么都执行要么都不执行。
一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态。
隔离性:一个事务的执行不受其他事务事务的干扰。
持久性:一个事务一旦提交,则会永久的改变数据库的数据。

事务的创建:
隐式事务:事务没有明显的开启和结束的标记。
比如insert、update、delete语句

delete from 表 where id = 1;

显示事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用

set autocommit=0;

步骤1:开启事务
set autocommit=0;
start transaction;可选的

步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
...

步骤3:结束事务
commit;提交事务
rollback;回滚事务

savepoint 节点名;设置保存点
事务的割离级别:
脏读 不可重复度 幻读
read uncommitted
read committed ×
repeatable read × ×
serializable × × ×

MySQL中默认,第三个割离级别 repeatable read

Oracle中默认第二个隔离级别 read committed

查看割离级别:

select @@tx_isolation;

设置割离级别:

set session|gloable transaction isolation level 割离级别;

1
2
3
4
开启事务的语句:
uadate 表 set 柯南的余额=500 where name='柯南'
update 表 set 秀一的余额=1500 where name='秀一'
结束事务的语句;

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1.演示事务的使用步骤
开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance = 1000 WHERE username='安室透';
UPDATE account SET balance = 1000 WHERE username='秀一';

#结束事务
ROLLBACK;
#commit;

2.演示事务对于delete和truncate的处理的区别

SET autocommit=0;
START TRANSACTION;

DELETE FROM account;
ROLLBACK;

3.演示savepoint 的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滚到保存点