TCL
一、TCL事务控制语言
事务:
一个或者一组sql语句组成一个执行单元,这个单元要么全部执行,要么全部不执行
show engine; //查看支持的引擎。
innodb引擎支持事务。
事务的特性:ACID
1、原子性(Atomicity):
原子性是指事务是一个不可分割的工作单位,事务中操作要么全执行,要么都不发生。
2、一致性(Consistency):
事务使数据库从一个一致性状态变为另一个一致性状态。
3、隔离性(Isolation):
一个事务的执行不能被其他事物干扰,并发执行的各个事务之间不能相互干扰。
4、持久性(Durability):
一个事务一旦被提交,它对数据库中数据的改变就是永久性的。
二、事务的创建
隐式事务:事务没有明显的开始和结束的标记
比如:insert,update,delete
显式事务:事务有明显的开始和结束的标记
前提:必须先设置自动提交功能为禁用
set autocommit = 0;
show variables like ‘autocommit’;
步骤1:开启事务
set autocommit = 0;
start transaction;
步骤2:编写事务中sql语句(select,insert,update,delete)
语句1,
语句2,
。。。
步骤3:结束事务
commit; //提交事务
rollback; //回滚事务
演示事务使用步骤
开启事务:
set autocommit = 0;
start transaction;
编写事务语句:
update account set balance = 1000 where username=‘syz’;
结束事务:
commit;
或者
rooback;//回滚事务
delete和truncate在事务中区别
delete
set autocommit = 0;
start transaction;
delete from account;
rollback;
truncate
set autocommit = 0;
start transaction;
truncate table account;
rollback;
事务的隔离级别
1.事务没有隔离的时候出现的问题:
脏读
针对更新
幻读
针对插入,删除
不可重复读
2.隔离级别:
读未提交
出现脏读,幻读,不可重复读
读已提交
出现幻读,不可重复读
可重复读
出现幻读
序列化
都可避免
mysql默认级别: 可重复读
oracle默认级别: 读已提交
查看隔离级别: select @@tx_isolation;
设置隔离级别,只针对当前连接有效:
set session transaction iaolation level serializable;