TCL(Transaction Control Language) 事务控制语言
事务:
一个或一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
一、事务的特性:
原子性(‘Atomicity’):一个事务不可再分割,要么都执行要么都不执行
一致性(‘Consistency’):一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性(‘Isolation’):一个事务的执行不受其他事务的干扰
持久性(‘Durability’):一个事务一旦提交,则会永久的改变数据库的数据.
二、事务的隔离级别:
隔离名称 脏读 不可重复读 幻读
READ UNCOMMITTED √ √ √
READ COMMITTED × √ √
REPEATABLE READ × × √
SERIALIZABLE × × ×
mysql中默认 第三个隔离级别 REPEATABLE READ
oracle中默认第二个隔离级别 READ COMMITTED
查看隔离级别
SELECT @@tx_isolation;
设置隔离级别
SET SESSION|GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别
显示存储引擎:
SHOW ENGINES;
显示事务是否开启
SHOW VARIABLES LIKE ‘autocommit’;
三、事务的创建
1.隐式事务:事务没有明显的开启和结束的标记
比如:INSERT、UPDATE、DELETE
2.显式事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
步骤一:开启事务
SET autocommit=0; 自动提交设置为0
START TRANSACTION; 开启事务
步骤二:编写事务中的sql语句(select、insert、update、delete)
语句1;
语句2;
…
步骤三:结束事务 (此处只能在做一个执行,需要判断成功与否只能在java开发工具中判断)
COMMIT; 成功提交事务
或
ROLLBACK; 失败回滚事务
或
①在SQL语句中的某处设置【SAVEPOINT 节点名;】
②在事务结束处 【ROLLBACK TO 节点名;】滚回到设置保存点处 实例在 1.2
1.1 演示事务过程
开始事务
SET autocommit=0;
START TRANSACTION;
sql语句
UPDATE account SET balance=500 WHERE username=‘jack’;
UPDATE account SET balance=2000 WHERE username=‘rose’;
结束事务
COMMIT;
##rollback;
SELECT * FROM account;
1.2 演示savepoint的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=3;
SAVEPOINT a;##设置保存点
DELETE FROM account WHERE id=4;
ROLLBACK TO a;