事务

通常是默认开启事务的,所以不会回滚

事务保证了数据的一致性

  • 要么都成功
  • 要么都失败

对于没有开启自动提交的数据,是可以回滚的,一旦提交了之后,就不可以回滚,体现了MySQL的持久性

自动提交:@@autocommit=1;

手动提交:commit;

回滚:rollback;

开启事务的两种方式

  1. begin;
  2. start transaction;

事务的四大特征:

  • A 原子性:事务是最小的单位,不可以在分割。

  • C 一致性:事务要求,同一事务中的sql语句,必须保证同时成功或者同时失败。

  • I 隔离性:事务1和事务2之间是具有隔离性的。

  • D 持久性:事务一旦结束(commit,rollback),就不可以返回。事务开启:

修改默认提交

  • 1.set autocommit=0;
  • 2. begin;
  • 3. start transaction;

事务手动提交:commit;

事务手动回滚:rollback;

事务的隔离性

事务的隔离性越高,则性能越差,系统默认的隔离级别是REPEATABLE READ

查看系统隔离性

 select @@global.transaction_isolation;

查看会话隔离性

 select @@transaction_isolation;

修改系统隔离性

set global transaction isolation level read committed;

1:read uncommitted

会出现脏读现象,即可以读到还未被提交的事务,如果未被提交的事务rollback,会发生不可预料的事情,应当避免发生脏读的发生

2:read committed

会出现不可重复读现象,即事务b对于事务a的update语句提交之后与修改之前都进行读取,导致读取的数据不一致

3:repeatable read

会出现幻读现象,事务B前后两次读取同一个范围的数据,在事务B两次读取的过程中事务A新增了数据,导致事务B后一次读取到前一次查询没有看到的行。

幻读和不可重复读有些类似,但是幻读强调的是集合的增减,而不是单条数据的更新

4:serializable

会出现超时的情况,当事务a开启并且还没有commit的时候,如果需要insert,这会造成等待,如果时间久,则可以失败,事务一个接一个执行

原文地址:http://www.cnblogs.com/happy12123/p/16837366.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性