#TCL Transaction Control Language 事务控制语言
/*
事务:
一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
事务的acid属性
1.原子性(atomicity):事务是不可分割,要么都执行要么都不执行
2.一致性(consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态
3.隔离性(isolation):一个事物的执行不能被其他事务干扰
4.持久性(Durability):一个事物一旦提交,则会永久的改变数据库的数据
查看变量:show variables like ‘autocommit’;
事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如insert、update、delete
显示事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
禁用自动提交功能:set autocommit =0;
步骤1:开启事务
set autocommit = 0 ;
start transaction; 可选的
步骤二:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
……
步骤3:结束事务
commit;提交事务
或 rollback;回滚事务
设置保存点:savepoint 节点名;
事物的隔离级别
脏读 不可重复读 幻读
read uncommitted √ √ √
read committed √ √ √
repeatable read × × √
serializable × × ×
mysql中,默认repeated read
oracle中,默认read committed
查看隔离级别:select @@tx_ioslation;
设置隔离级别 set session|global transaction isolation level 隔离级别;
*/
#演示事务的使用步骤 转账
#开启事务
SET autocommit = 0;
#编写一组事务
UPDATE accout SET balance =1000 WHERE username = '张无忌';
UPDATE accout SET balance =1000 WHERE username = '赵敏';
#结束事务
COMMIT;
#演示savepoint的使用
SET autocommit = 0;
START TRANSACTION;
DELETE FROM account WHERE id =25;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滚到保存点