Mysql的事务

1  什么是事务?

要么都成功,要么都失败

1.1 事务原则:acid-----原子性、一致性、隔离性、持久性

原子性:事务有不可分割性,要么都成功,要么都失败,不会只发生一个动作。

一致性:事务操作前后的状态一致。

隔离性:多个用户同时操作,事务之间具有隔离性,不会影响本次事务操作。

持久性:事务结束后的数据不会因外界的原因导致数据丢失,一旦提交不可逆,持久化保存到数据库。 

1.2 事务的隔离导致的问题:脏读、不可重复读、幻读

脏读:事务读取到其他事务未提交的数据

不可重复读:一个事务内读取多次读取同一数据,结果不一样。

幻读:一个事务内读取到别的事务插入的数据,导致前后读取不一致。

## mysql是默认开启事务自动提交的,关闭自动事务提交:set autocommit=0 //   开启自动事务提交:set autocommit=1 

  事务的执行流程:

 

//1、--关闭事务自动提交

set autocommit=0    --关闭事务自动提交

//2、事务开启:

start  transaction    -----标记一个事务的开始,之后的sql都在同一个事务内。

//3-1、事务执行成功,提交:持久化

commit

//3-2、事务执行失败,回滚  :回滚到原来的样子    

rollback

//4、事务结束,开启事务自动提交

set autocommit=1         ---开启事务自动提交

savepoint  保存点          ------设置事务的保存点

rollback to savepoint    ======回滚到保存点

release savepoint          -----移除保存点

模拟转账场景测试

-- 创建数据库
CREATE DATABASE bank CHARACTER SET utf8 COLLATE utf8_general_ci ;
-- 切换数据库
USE bank;
-- 创建表格
CREATE TABLE IF NOT EXISTS `account` (
	`id` INT(4) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(16) NOT NULL,
	`money` DECIMAL(9,2) NOT NULL,
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET =utf8 

-- 插入数据
INSERT INTO `account`(`name`,`money`) VALUES('张三',5000.00),('李四',10000.00)
-- 查询数据
SELECT * FROM account 
-- 关闭自动事务提交
SET autocommit=0
-- 更新数据
UPDATE `account` SET `money`=`money`-500 WHERE `name`='张三';
UPDATE `account` SET `money`=`money`+500 WHERE `name`='李四'
-- 事务提交,持久化
COMMIT
-- 事务回滚,回到原来的状态
ROLLBACK

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值