TCL
事务控制语言
一个或以组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
案例:转账
张三丰 1000
郭溪 1000
事务的acid属性
1.原子性:一个事务不可再分割,要么全部执行,要么全部不执行
2.一致性:一个事务执行会使数据从一个一致性状态切换到另一个一致状态
3.隔离性:一个事务的执行不受其他事务的干扰,多个事务互相隔离
4.持久性:一个事务一旦提交,则会永久的改变数据库的数据
事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如 insert update delete语句
显示事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
步骤1:开启事务
set autocommit=0
start transaction;
步骤2:编写事务中的sql语句(select insert update delete)
语句1
语句2
语句3
步骤3:结束事务
commit:提交事务
rollback:回滚事务
savepoint 节点名;设置保存点
事务的隔离级别
脏读 不可重复读 幻读
read uncommitted 可以 可以 可以
read committed 不可以 可以 可以
repeatable read 不可以 不可以 可以
serializable 不可以 不可以 不可以
MySQL 中默认第三个隔离级别 repeatable read
oracle 中默认第二个隔离级别 read committed
脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
不可重复读:一个事务多次读取,结果不一样。
幻读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“插入”的数据
set autocommit=0;
update account set balance = 500 username=‘小刚’;
update account set balance =1500 username=‘小红’;
查看隔离级别
select @@tx_isolation;
设置隔离级别
set session(或global) transaction isolation level 隔离级别
commit
设置当前MySQL 连接的隔离级别
set transaction isolation read committed
设置数据库系统的全局的隔离级别
set global transaction isolation level read committed
演示savepoint 的使用
set autocommit=0
start transaction
delete from account where id= 25;
savepoint a;
rollback to a;
delete和truncate在事务使用时的区别