22事务(TCL) ——MySQL

# 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依然会被删掉













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值