标签:问题 一致性 bank varchar sam 保护 开启 表示 rollback
避免事务,会占用内存
简而言之:事务 - 就是保护多条执行的sql语句,要么全部成功,要么全部失败
比如:转账就是一个事务:从一个用户将资金转出,再将资金转入到另一个用户,这两个操作看做一体
事务是引擎层实现的,mysql是多引擎的系统,不是所有引擎都支持事务的,比如MySQL原生的MyISAM就不支持事务,这也是MyIASM被InnoDB取代的原因之一。
依次解决上层的问题
读未提交(脏读):允许一个事务读取另外一个事务没有提交的数据。
读提交(解决脏读可能出现的问题):指一个事务只能读取到另外一个事务已经提交的数据。
可重复读:(解决可重复读可能出现的问题)当数据在另一事务操作中时,无法读取,只有当那个事务完成了,才能读取到数据。
串行化(解决幻读):sql按顺序执行,不会出现问题,但是效率低。
1、用 BEGIN, ROLLBACK, COMMIT来实现
2、直接用 SET 来改变 MySQL 的自动提交模式:
# mysql中事务的执行
create table bank(
id int,
name varchar(16),
money decimal(65, 2)
);
insert into bank values(1, 'Tom', 10), (2, "Bob", 10);
# 假设出现以下执行情况
# 没有事务支持情况下,Tom的钱就丢了
update bank set money=money-1 where name='Tom';
update bank set money=money+1 where name='ruakei';
# 将两条sql看做事务处理
# 开启事务
begin;
update bank set money=money-1 where name='Tom';
update bank set money=money+1 where name='ruakei';
# 确认无误,提交事务
commit;
# 确认有误,回滚
rollback;
参考博客:
https://blog.csdn.net/DorAction/article/details/87971378
标签:问题 一致性 bank varchar sam 保护 开启 表示 rollback
原文地址:https://www.cnblogs.com/zx125/p/11667960.html