# TCL
/*
Transaction Control Language 事务控制语言
一、事务:
一个或多个aql语句组成的执行单元,这个执行单元,要么全部执行,要么全部不执行
案例:转账,张给郭转500
张三丰 1000
郭襄 1000
update 表 set 张三丰的余额=500 where name="张三丰"
update 表 set 郭襄的余额=1500 where name="郭襄"
可见,上述的两条语句要么都执行,要么都不执行
二、事务的(ACID)属性:
1.原子性(Atomicity)
* 原子性指的是事务但是不能拆分的,要么都执行,要么都不执行
2.一致性(Consistency)
* 事务必须使数据库从一个一致状态变成另一个一致状态
3.隔离性(Isolation)
* 多个事务之间要互不干扰
4.持久性(Durability)
* 事务一旦提交,不可撤回
三、事务的创建
1.隐式的事务:事务没有明显的开启和结束的标志
比如:insert 、updata 、delete语句
2.显式事务:有明显的开启和结束标志
注释:必须先设置自动提交功能为禁用,下面的设置是一次性的,不是永久性的
set autocommit=0;
查看状态
show variables like 'autocommit';
步骤1:开启事务
set autocommit=0;
start transaction;【可选】
步骤2:编写SQL语句(select insert update delect)
语句1;
语句2;
...
步骤3:结束事务
commit; (提交事务)
rollback; (回滚事务)
四、事务的并发问题
1.脏读:对于两个事务T1,T2;T1已经读取了已经被T2更新但是没有提交的数据字段
2.不可重读读:对于两个事务T1,T2;T1读取了一个字段,然后T2更新了该字段。T1再读取该字段
发现两次读取的信息不同。
3.幻读:对于两个事务T1,T2;T1读取了一个字段,T2在表中插入了新的内容,T1再一次读取的时候
发现信息有了新的变化。
可以通过事物的隔离级别来避免并发问题。
MySQL支持4中隔离级别
*/
show ENGINES; # 查看MySQL支持的存储引擎 (innodb 支持事务)
show variables like 'autocommit';
# 演示事务的使用
/*
drop table if exists account;
create table account(
id int primary key auto_increment,
username varchar(20),
balance double
);
insert into account(username,balance)
VALUES ('张三',1000),('赵小敏',1000);
*/
# 开启事务
set autocommit=0;
start transaction;
#编写一组事务
update account set balance=500 where username="张三";
update account set balance=1500 where username="赵小敏";
#结束事务
commit; #提交/执行
-- rollback; #回滚
# 五、delete(删除)和truncate(删除)在事务使用时的区别
-- delete:在事务中执行delete删除一个table时,是支持回滚的(rollback)
-- truncate:在事务中执行truncate删除一个table时,是不支持rollback,即使结束事务的语句为rollback,
-- table依然会被删掉
22事务(TCL) ——MySQL
最新推荐文章于 2024-08-18 10:54:05 发布