什么是事务?
举个例子,小王有金额5000,今天他手机转账给员工小李发奖金1000元。当小王点击汇款时,他的账户减少1000,但是在发送的过程中网络不稳定,导致汇款没到小李的账户,那么这1000元去哪了?
事务的出现就可以帮我们解决这类问题,事务主要用于处理操作量大,复杂度高的数据。
- 每条SQL语句都是事务
- 事务只对DML语句有效,对DQL无效。
事务的ACID
- 原子性 Atomicity
- 一致性 Consistency
- 隔离性 Isolation
- 持久性 Durability
- 原子性,如刚刚举的例子,原子性包含两个重要概念,即提交和回滚;小王在支付操作的时候是提交操作,当遇到意外导致交易无法完成,则启动事务回滚,此时交易为未完成。而不是直接扣除小王的账户余额。
- 一致性,在每次提交或回滚之后以及正在进行的事务处理期间,数据库始终保持一致状态。
- 隔离性,事务之间不能互相干扰,也不能看到彼此的未提交数据。
- 持久性,一旦提交操作成功,该事务所做的更改就不会因为一些意外而丢失。
事务的使用
- 开启事务: start transaction
- 提交事务: commit //所有语句全部执行完毕,没有发生异常,提交事务,数据更新到数据库中。
- 回滚事务: rollback //遇到突发情况,则撤销所执行的SQL语句。
例:先在Windows操作系统下打开cmd,进入你的MySQL
mysql>use my-db;
mysql>start transaction;
mysql>update xw set money = money - 1000; //还未提交事务
mysql>rollback; //假如此时遇到意外了,撤销以上操作
//若正常执行,则
mysql>commit; //提交事务