Mysql中事务是什么?有什么用?( 二 )


什么是手动提交事务?只要不执行commit,那么mysql会认为你所执行的sql都是在一个事务当中,当commit的时候,假如成功了就都成功了,一旦执行的sql有异常,就全部回滚!
SELECT @@autocommit ;SET @@autocommit = 0 ;COMMIT;ROLLBACK;注意:

  • 上述的这种方式,我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交,需要手动的执行commit进行提交 。
  • SET @@autocommit = 0 ; 设置手动提交 是临时生效(只对当前会话有效),一旦会话关闭就没了 。想要设置永久手动提交可以通过mysql的配置文件当中添加 autocommit=0 然后重启即可 。
什么是会话?会话并不是指的客户端连接,一个客户端连接可以创建多个会话,navicate应该都用过,通过下图应该会一目了然!下面两个查询界面就是两个会话!
Mysql中事务是什么?有什么用?

文章插图
【Mysql中事务是什么?有什么用?】 
sql测试:提交事务之后会发现数据根本没修改成功,原因就是执行过程遇到了报错,然后自动会进行回滚!
-- 先改为手动提交SET @@autocommit = 0 ;-- 1. 查询张三余额 select * from account where name = '张三'; -- 2. 张三的余额减少1000 update account set money = money - 1000 where name = '张三'; 出错了.... (这里是故意整的不加注释,来模仿执行当前事务执行到中间报错了)-- 3. 李四的余额增加1000 update account set money = money + 1000 where name = '李四';-- 4. 提交事务 COMMIT;3、控制事务方式二(通过命令开启事务)除了上面所说的改为手动提交,还有一种就是通过sql来指定我要创建一个事务,commit的时候就是事务结束当前事务的时候 。
  • 开启事务: START TRANSACTION 或 BEGIN ;
  • 提交事务: COMMIT;
  • 回滚事务: ROLLBACK;
sql测试:-- 开启事务 start transaction -- 1. 查询张三余额 select * from account where name = '张三'; -- 2. 张三的余额减少1000 update account set money = money - 1000 where name = '张三'; -- 3. 李四的余额增加1000 update account set money = money + 1000 where name = '李四'; -- 如果正常执行完毕, 则提交事务 commit; -- 如果执行过程中报错, 则回滚事务(commit失败的时候会自动执行回滚,不需要我们管) -- rollback;三、事务四大特性事务应该具有4个属性:原子性、一致性、隔离性、持久性 。这四个属性通常称为 ACID特性  。
  • 原子性(atomicity)  。一个事务是一个不可分割的工作单位,事务中包括的操作 要么都做,要么都不做  。
  • 一致性(consistency)  。事务必须是使 数据库从一个一致性状态变到另一个一致性状态  。一致性与原子性是密切相关的 。
  • 隔离性(isolation)  。一个事务的执行不能被其他事务干扰 。即一个事务内部的操作和使用的数据对并发的其他事务是隔离的, 并发执行的各个事务之间不能互相干扰  。
  • 持久性(durability)  。持久性也称永久性(permanence),指一个事务一旦提交,它 对数据库中数据的改变就应该是永久性的  。接下来的其他操作或故障不应该对其有任何影响 。
假设我现在去ATM机转账,将我的建设银行卡的1000块钱转到中国银行的卡里去 。程序可能是这样执行的:
第一步:从建设银行卡的余额里扣除1000;
第二步:然后再从中国银行的卡的余额里增加1000 。
假如在第一步执行完之后服务器宕机了,那么显然第二步将无法完成,我的建设银行卡被扣了1000,但中国银行的卡却没增加,我将白白损失了1000块钱 。在数据库中,这就是所谓的“不一致性状态” 。
那么如何实现“一致性”呢?事实上,ACID中的AID都是为了实现C的 。事务的最终目的就是为了实现“ 一致性 ” 。如果转账的操作具有原子性,那么在中途出现错误的时候发生回滚,就不会出现不一致的情况,可见,“原子性”和“一致性”是紧密联系在一起的!
四、事务的隔离性这里再重点提一下ACID当中的 隔离性(isolation)  。


推荐阅读