mysql事务

什么是事务, 你可以百度一下。

MySQL引擎

mysql 一共有两种引擎:Innodb和MyIASM;

Innodb引擎

Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数

据库系统。它本身实际上是基于Mysql后台的完整的系统。Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据

和索引。但是,该引擎是不支持全文搜索的。同时,启动也比较的慢,它是不会保存表的行数的。当进行Select count(*)

from table指令的时候,需要进行扫描全表。所以当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是

不会锁定全表的。所以在并发度较高的场景下使用会提升效率的。

MyIASM引擎

MyIASM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行Insert插入和Update更新语

句时,即执行写操作的时候需要锁定这个表。所以会导致效率会降低。不过和Innodb不同的是,MyIASM引擎是保存了表的

行数,于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的

读操作远远多于写操作时,并且不需要事务的支持的。可以将MyIASM作为数据库引擎的首先。

使用场景:

容量的数据集时趋向于选择Innodb。因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复。主键

的查询在Innodb也是比较快的。

大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快,但是UPDATE语句在Innodb下执行的会比较

的快,尤其是在并发量大的时候。

两种引擎所使用的索引的数据结构是什么?

答案:都是B+树!

MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。

Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。

使用事务

因为Mysql默认是使用MyIASM 引擎,所以如果想支持事务必须切换到 Innodb引擎。

windows下找到Mysql.ini

7925105-5bd6136e6bf85cc7.png
image.png

按照注释操作后重启MySQL

设置提交模式

set autocommit =0; //关闭自动提交(设置这个)
set autocommit =1; //开启自动提交

创建表语句
CREATE TABLE runoob_transaction_test( id int(5)) engine=innodb;

填充数据

以自己的表举例


7925105-bcad9199b3b5a802.png
image.png

模拟开工资的时候断电了(q是老板,a是员工)

输入语句

开始事务: start transaction;

执行两条更新操作

1.扣住老板1000元
update p1 set balance = balance -1000 where firstname='q';

2.员工增加1000元
update p1 set balance = balance + 1000 where firstname='a';

然后我们查一下结果

7925105-4b926895fd20ce37.png
image.png

可以看到 表中数据已经发生变化

接下来模拟断电;

输入命令 quit;


7925105-e18d3d0df5992c77.png
image.png

重新连接数据库
再次查询下表

7925105-17c6cb82740161f5.png
image.png

数据又变回去了

设置取消自动提交后
需要commit之后才能保存最终结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

nier6088

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

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

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

打赏作者

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

抵扣说明:

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

余额充值