当前位置:Gxlcms > 数据库问题 > mysql 事务

mysql 事务

时间:2021-07-01 10:21:17 帮助过:18人阅读

事务日志:又分为重做日志和撤销日志。     重做日志(redo log):意味着每一个操作,在真正写到数据库里面之前事先写到日志当中了。如果服务器崩溃了,下次还可以根据重做日志,再做     撤销日志(undo log):我们的每一次操作,在操作之前要把他原来的状态记录下来。万一将来我们需要还原到原来的状态的时候,我们可以根据日志还原。 mysql支持事务的存储引擎是innodb。 事务是指,多项操作作为一个处理单元执行,要么都执行,要么都不执行   mysql进行每一个事务的时候,都会在日志先完成。意味着我们的每次增删查改都会在内存进行完之后,写入到日志当中,才会写到数据库当中。   比如我们进行delete操作,删除某一段数据的时候,首先执行是在内存当中执行的。然后再事务日志当中将某一段数据标记为删除。但是在数据文件当中是还没有被删除的。只是在日志中标记删除而已,此时我们查询也看不到该数据。当事务提交了,日志才会提交,才会真正的将其从数据文件中删除。日志中记录的只是操作,而不是操作本身。 日志不能只有一个。事务日志一般有两个。被称为日志组。 一般事务日志,不能和数据库一同放在同一块物理磁盘上,万一磁盘坏了,事务没了,数据库也没有了 事务状态: 1.活动的状态 2.部分提交状态(是指最后一条语气执行之后,正在由日志提交到磁盘上) 3.失败 4.终止 5.提交的(一旦提交无法撤销)   事务一般的并发执行的这样做的好处是: 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;  

mysql 事务

标签:ack   关闭   服务   就是   标记   单元   磁盘   pac   mysq   

人气教程排行