概述
事务
什么是事务:
数据库事务:(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-事务管理-事务处理的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复