MySQL05-TCL

NiuMT 2020-06-03 20:58:30
MySQL

TCL语言

Transaction Control Language 事务控制语言

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

事务的特性:ACID

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

事务的创建

步骤1:开启事务

set autocommit=0;

start transaction;可选的

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

​ 语句1;

​ 语句2;

​ …

步骤3:结束事务

commit;提交事务

rollback;回滚事务

savepoint 节点名;设置保存点

DML语句是insert ,update, delete —->这个是要COMMIT才能存储在ORACLE数据库里

DDL语句是系统自动提交的,不需要手动COMMIT。这是修改表结构,执行完成,就生效了。

脏读: 对于两个事务T1, T2, T1 读取了已经被T2 更新但还没有被提交的字段. 之后, 若T2 回滚, T1读取的内容就是临时且无效的.

不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.

幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后T2 在该表中插入了一些新的行. 之后, 如果T1 再次读取同一个表, 就会多出几行.

事务的隔离级别:

​ 脏读 不可重复读 幻读

read uncommitted:√ √ √

read committed: × √ √

repeatable read: × × √

serializable × × ×

image-20201103164920841

#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance = 1000 WHERE username='张无忌';
UPDATE account SET balance = 1000 WHERE username='赵敏';

#结束事务
ROLLBACK;
#commit;

SELECT * FROM account;

#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;#回滚到保存点

SELECT * FROM account;