mysql复盘,⑧事务

– 转账就是一组操作,要’ at line 20
– MySQL的存储引擎:表数据的存储格式

– 我有一首诗,我现在想让你把这首诗记下来,你会采用什么方式?
– 1.存到电脑上
– 2.写到本子上
– 3.记录到脑子里

– 变得是什么?不变的是什么?
– 不变是内容,变的存储的方式
– 表数据最终都是存储到电脑硬盘里面,我可以选择存储的方式
– 同一个电影,可以有n种格式,mp4 avi 清晰度和文件大小都不一样
– 不管采用哪种方式存储,数据是不变的

– myisam:张马虎,速度高,不支持事务安全,不安全,表锁。效率高
– INNODB:李小心,速度慢, 支持事务安全,行锁,效率低

– MyISAM不支持事务、也不支持外键,但其访问速度快,对事 务完整性没有要求
– ② InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事 务安全。
– 但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

– 如何选择表的存储引擎
– ①如果你的应用是不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择
– ②一般来说,如果需要事务支持,并且有较高的并发读写 频率,InnoDB是不错的选择。

– 如果不标明存储引擎,默认都是myiasm,
– 修改存储引擎语法:
– ALTER TABLE 表名 ENGINE = 储存引擎;

– 博文: 账户8000 支入:+2000
– 具澳:账户8000 支出:-2000
– 在数据库中是一个什么操作?转账
update ac set m-2000 where
update ac set m+2000 where

– 转账就是一组操作,要么全部执行成功,要么全部执行失败,
– 如果有其中一个执行成功一个执行失败了,就会有问题

– 什么是事务?
– 指的是一组操作要么全部执行成功,要么全部执行失败

create table account(
aid int not null PRIMARY key,
aname VARCHAR(10) not null,
money DECIMAL(9,2)
)charset=utf8,ENGINE=INNODB;

INSERT INTO account(aid,aname,money) VALUES(1,‘博文’,8000);
INSERT INTO account(aid,aname,money) VALUES(2,‘具澳’,8000);

SELECT * from account;

– 模拟网络故障
update account set money=money-2000 where aname=‘具澳’;
update account set money=money+2000 where aname=‘博文’;

update account set money=money+2000 where aname=‘博文’;
– 银行转账的规则变了:先加后减
– 原子性:要求全部执行成功或者全部执行失败
– 隔离性:在所有操作未完成之前,其他会话不能看到中间过程
– 一致性:事务发生前和发生后的总金额依然匹配
– 持久性:事务产生的影响是不能撤销的

– commit:提交事务:程序没有异常
– ROLLBACK:回滚事务:程序在运行期间出现了异常,回滚到未修改的状态

– 禁止自动提交
set autocommit=0;
– 开启事务
start TRANSACTION;-- transaction
update account set money=money-2000 where aname=‘博文’;
update account set money=money+2000 where aname=‘具澳’;
– 提交事务
COMMIT;

– 禁止自动提交
set autocommit=0;
– 开启事务
start TRANSACTION;
update account set money=money-2000 where aname=‘博文’;
update account set money=money+2000 whereaname=‘具澳’;
– 提交事务
ROLLBACK;
– 隔离级别:
– 读未提交(Read uncommitted)
– 读已提交(Read committed)
– 可重复读(Repeatable read)
– 可串行化(Serializable )

– 隔离级别定义了事务与事务之间的隔离程度。默认隔离级别:可重复读Repeatable read
– 脏读:
– 不可重复读
– 主要作用在修改
– 幻读:作用在添加和删除
– 同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。

– 1.查看当前会话隔离级别
– select @@tx_isolation;
– 2.查看系统当前隔离级别
–  select @@global.tx_isolation;
–  3.设置当前会话隔离级别
–  set session transaction isolation level repeatable read;
set session transaction isolation level Read uncommitted ;
–  4.设置系统当前隔离级别
–  set global transaction isolation level repeatable read;
– 可串行化效率太低了,虽然三个都可以避免
– 5. mysql 默认的事务隔离级别是 repeatable read ,一般情况下,没有特殊要求,没有必要修改(因为该级别可以满足绝大部分项目需求)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值