mysql事务

数据库要支持事务,必须满足4个条件:
1,原子性(必须都完成。或者都不完成)
2,一致性
3,隔离性(一个事务进行的时候不能影响另外一个事务的进行)
4,持久性(一旦事务完成,数据库系统必须保证任何故障都不会引起事务表现出不一致性,靠事务日志来保证)

事务日志:又分为重做日志和撤销日志。
重做日志(redo log):意味着每一个操作,在真正写到数据库里面之前事先写到日志当中了。如果服务器崩溃了,下次还可以根据重做日志,再做

撤销日志(undo log):我们的每一次操作,在操作之前要把他原来的状态记录下来。万一将来我们需要还原到原来的状态的时候,我们可以根据日志还原。

mysql支持事务的存储引擎是innodb。

事务是指,多项操作作为一个处理单元执行,要么都执行,要么都不执行

mysql进行每一个事务的时候,都会在日志先完成。意味着我们的每次增删查改都会在内存进行完之后,写入到日志当中,才会写到数据库当中。

比如我们进行delete操作,删除某一段数据的时候,首先执行是在内存当中执行的。然后再事务日志当中将某一段数据标记为删除。但是在数据文件当中是还没有被删除的。只是在日志中标记删除而已,此时我们查询也看不到该数据。当事务提交了,日志才会提交,才会真正的将其从数据文件中删除。日志中记录的只是操作,而不是操作本身。
日志不能只有一个。事务日志一般有两个。被称为日志组。
一般事务日志不能和数据库一同放在同一块物理磁盘上,万一磁盘坏了,事务没了,数据库也没有了

事务状态:

1.活动的状态
2.部分提交状态(是指最后一条语句执行之后,正在由日志提交到磁盘上)
3.失败
4.终止
5.提交的(一旦提交无法撤销)

事务一般的并发执行好处是:

1,提高吞吐量和资源利用率
2,减少等待时间

事务调度可以分为:

1 可恢复调度
2 无级联调度

启动事务:
start transaction;
回滚事务:(事务过程中,执行了某个操作,撤销该操作)
rollback;
提交事务:(一旦提交无法回滚)
commit;

mysql有个自动提交事务的功能。可以使用select 查看
select @@autocommit; 查看该设置是否开启,没有明确启动事务情况下,默认是启动的,因此每一句都会自动提交。mysql每执行一次操作都会使用一次IO操作。因此会消耗IO资源。建议关闭自动提交
关闭自动提交:
set autocommit=0;
关闭之后,任何一次操作应该明确使用start transaction;来启动事务。这是mysql优化的一个策略,如果不启动事务,你写的所有语句当被当做一个事务

mysql支持使用保存点,就是撤销时候,不全撤销,只是撤销到某个保存点

使用保存点:命令savepoint +保存点名称

比如。我们执行一条删除某个表中字段的命令

delete from text where ID=78;

执行该命令完成后执行,表示在此建立一个保存点
savepoint abc;
再多执行两条删除命令

delete from text where ID=79;
savepoint cde;
delete from text where ID=76;
savepoint efg;
这样就设置了三个保存点。abc,cde,efg

现在我们想回滚到不删除ID=78 这个字段,怎么回滚
rollback to abc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值