我是靠谱客的博主 羞涩心锁,最近开发中收集的这篇文章主要介绍mysql-事务管理-事务处理的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

事务

什么是事务:
数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,要不全成功要不全失败。
※ MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型不支持!
事务处理:可以确保非事务性单元的多个操作都能成功完成,否则不会更新数据资源。
数据库默认事务是自动提交的, 也就是发一条 sql 它就执行一条。如果想多条 sql 放在一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,并且没有提交,mysql 会自动回滚事务。或者我们使用 rollback 命令手动回滚事务。
优点:通过将一组操作组成一个,执行时,要么全部成功,要么全部失败的单元。
使程序更可靠,简化错误恢复。
例:
•A汇款给B 1000元
•A账户-1000
•B账户+1000
•以上操作对应数据库为两个update。这两个操作属于一个事物。否则,可能会出现A账户钱少了,B账户钱没增加的情况。

事务四大特性:

事务是必须满足4个条件(ACID)
1、原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
2、一致性(Consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。在事务开始之前和结束之后,数据库的完整性约束没有被破坏
3、 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰,这些通过锁来实现。
4、 持久性(Durability):指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障(比如说宕机等)不应该对其有任何影响。
事务的ACID特性可以确保银行不会弄丢你的钱,而在应用逻辑中,要实现这点非常难,甚至可以说是不可能完成的任务。

MySQL事务处理的方法:

1、用BEGIN,ROLLBACK,COMMIT来实现

START TRANSACTION | BEGIN [WORK]  开启事务
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] 提交当前事务,执行永久操作。
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] 回滚当前事务到开始点,取消上一次开始点后的所有操作。
SAVEPOINT 名称   折返点

2、直接用set来改变mysql的自动提交模式

   MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!
 SET AUTOCOMMIT = {0 | 1} 设置事务是否自动提交,默认是自动提交的。
0:禁止自动提交
1:开启自动提交。
※ MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持!
mysql> set autocommit=0;  禁止事务自动提交
mysql> delimiter //        修改结束符
mysql> start transaction;  创建事务
    -> update books set bName="ccc" where bId=1;
    -> update books set bName="ddd" where bId=2;
-> commit;//   提交,一旦提交无法回滚

测试,查看是否完成修改:
mysql> select bName from books where bId=1 or bId=2;//
在这里插入图片描述
数据库存储引擎是否为innodb
mysql> show create table books//G
在这里插入图片描述
为MyISAM无法成功启动事务,虽然提交了,却无法回滚
修改数据库存储引擎为innodb

mysql> alter table books engine=innodb;
mysql> alter table category engine=innodb;

在这里插入图片描述
在这里插入图片描述
重新开启事务,并测试回滚

mysql> set autocommit=0;
mysql> delimiter //
mysql> start transaction;
    -> update books set bName="HA" where bId=1;
    -> update books set bName="LB" where bId=2;
-> commit;//
mysql> delimiter ;

在这里插入图片描述
无法回滚,因为我们commit已经提交了

mysql> delimiter //
mysql> start transaction; update books set bName="AH" where bId=1; update books set bName="BL" where bId=2;//  不提交
mysql> delimiter ;

在这里插入图片描述

回滚:

mysql> rollback;

在这里插入图片描述

最后

以上就是羞涩心锁为你收集整理的mysql-事务管理-事务处理的方法的全部内容,希望文章能够帮你解决mysql-事务管理-事务处理的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(89)

评论列表共有 0 条评论

立即
投稿
返回
顶部