2. mysql事务

一、存储引擎

存储引擎:
查看mysql支持的存储引擎:show engines;
	innodb: 支持事务
	myisam: memory; 不支持事务
#查看数据库引擎
SHOW ENGINES;

二、事务

1. 事务的定义

#TCL
/*
Transaction Control Language 事务控制语言

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

案例:转账
张无忌 1000
赵敏   1000

update 表 set 张无忌的余额=500 where name='张无忌';
中断
update 表 set 赵敏的余额=1500 where name='赵敏';
*/

2. 事务的四大特性

事务的属性:ACID

1. 原子性:事务是一个不可分割的单位,要么全部执行,要么全部不执行
2. 一致性:数据库从一个一致状态变换到另外一个一致状态
3. 隔离性:一个事务的执行不能被其他事务干扰
4. 持久性:一个事务一旦被提交就不会改变。

3. 事务的创建

/*
事务的创建:
隐式事务:事务没有明显的开启和结束标记
比如 insert update delete语句

显式事务:事务具有明显的开启和结束标记
前提:必须先设置自动提交功能为禁用	
set autocommit = 0;
查看事务是否自动提交	
show variables like 'autocommit';

步骤1 开启事务
SET autocommit = 0; 必须的
START TRANSACTION; 可选的
步骤2 编写事务中的sql语句 (select insert update delete)
	语句1;
	语句2;
	。。。
步骤3 结束事务
commit; 提交事务
rollback; 回滚事务
*/

CREATE TABLE ACCOUNT (
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(20),
	balance DOUBLE
);
INSERT INTO ACCOUNT VALUES(NULL,'张无忌',1000),(NULL,'赵敏',1000);
#演示事务的使用步骤
#开启事务
SET autocommit = 0;
START TRANSACTION; 
#编写一组sql语句
UPDATE `account`  SET `balance`=5000 WHERE username='张无忌';
UPDATE `account` SET `balance`=1500 WHERE username='赵敏';
#结束事务
#commit;
ROLLBACK;
SELECT * FROM `account`;

4. 事务的并发问题

/*
事务的并发问题:
	脏读:对于两个事务T1,T2。T1读取了T2修改但是还未提交的数据,则读取的数据就无效的
	不可重复读:对于两个事务T1,T2。T1读取了一个数据后,T2修改了该数据,则T1读取的数据与之前不一致
	幻读:对于两个事务T1,T2。T1读取数据后,T2修改了这个表的数据,则T1读取的数据就会发生变化
Oracle 支持2种事务的隔离级别 默认的为READ COMMITED,SERIALIZABLE
Mysql 支持4种事务的隔离级别: 默认为REPEATABLE READ  
				
事务的隔离级别;	
					脏读	  不可重复读	幻读
read uncommitted	✓		✓		✓
read committed				✓		✓
repeatable read						✓
serializable	
*/

#查看当前的隔离级别
SELECT @@transaction_isolation;
#设置隔离级别
#set session transaction isolation level REPEATABLE READ;

#savepoint 节点;设置保存点
#演示 savepoint 的使用
SET autocommit = 0;
START TRANSACTION;
DELETE FROM `account` WHERE id = 1;
SAVEPOINT a;
DELETE FROM `account` WHERE id = 2;
ROLLBACK TO a;

SELECT * FROM `account`;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAFEBABE 34

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值