百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL事务相干见识的细致介绍(代码示例)
分享文章到:

MySQL事务相干见识的细致介绍(代码示例)

发布时间:08/01 来源:未知 浏览: 关键词:
本篇文章给大家带来的内容是对于MySQL事务相干见识的细致介绍(代码示例),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

本篇文章给大家带来的内容是对于MySQL事务相干见识的细致介绍(代码示例),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

MySQL事务以及事务隔离级别

MySQL事务主要用于处置操纵量大,复杂度高的数据。比方在人员治理系统中,你删除一个人员,你就要删除人员的根本材料,也要删除和该人员相干的信息,如信箱,文章等,这些数据库操纵语句就形成了一个事务(举荐课程:MySQL教程)

    • MySQL中只要运用了Innodb数据库引擎的数据库或表才支撑事务

    • 事务处置可以用来保护数据库的完备性,保障成批的SQL语句要末全部施行,要末全部不施行

    • 事务用来治理insert,update,delete语句

  • 个别来说,事务必需知足4个前提:原子性,一致性,隔离性,耐久性

    • 原子性:一个事务中所有操纵,要末全部施行,要末全部不施行不会完毕在中间某个环节。事务在施行历程中产生差错会被回滚到事务开端前的状态

    • 一致性:在事务开端以前和事务完毕今后,数据库的完备性没有被毁坏。这表示写入的材料必需完全相符所有的预设法则,包括材料的精准度,串联性以及后续数据库可以自发性的完成预定的工作

    • 隔离性:数据库允很多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发施行时因为穿插施行而致使数据的纷歧致。事务隔离分为不一样级别,包含读取未提交内容,读取提交内容,可反复读和可串行化

    • 耐久化:事务处置完毕后,对数据的修改就是永恒的,即使系统故障也不会遗失

在MySQL下令行的默许是设定下,事务都是主动提交的,即施行SQL语句后就会即将施行COMMIT操纵。因而要显式的开启一个事务需要运用下令BEGIN或START TRANSACTION,或者施行下令SET AUTOCOMMIT=0,用来制止运用目前绘画的主动提交

事务控制语句:

  • BEGIN或START TRANSACTION;显式地开启一个事务

  • COMMIT;也可以运用COMMIT WORK,二者等价的。COMMIT会提交事务,并使已对数据库进行的所有修改成为永恒性

  • ROLLBACK;也可以运用ROLLBACK WORK,二者等价。回滚会完毕会员的事务,并撤回正在进行的所有未提交的修改

  • SAVEPOINT identifier;SAVEPOINT允许在事务中新建一个保留点,一个事务可以有多个SAVEPOINT

  • RELESE SAVEPOINT identifier;删除一个事务的保留点,当没有指定的保留点时,施行该语句会抛出一个异样

  • ROLLBACK TO identified;把事务回滚到标志点

  • SET TRANSACTION;用来设定事务的隔离级别。InnoDB存储引擎供给事务隔离级别有READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE

MySQL事务处置主要有两种办法:

  1. 用BEGIN,ROLLBACK,COMMIT来实现

    • BEGIN开端一个事务

    • ROLLBACK事务回滚

    • COMMIT事务确认

  2. 直接SET来转变MySQL的主动提交模式:

    • SET AUTOCOMMIT=0制止主动提交

    • SET AUTOCOMMIT=1开启主动提交

事务四大特性之一:隔离性

  1. 事务A跟事务B之间拥有一定的隔离性

  2. read uncommited 读未提交

    • 在该隔离级别,所有事务都可以看到其他未提交事务的施行效果。本隔离级别很少用于现实利用。读取未提交的数据称为脏数据

  3. read COMMIT

    • 大多数数据库系统的默许隔离级别(但不是MySQL)。一个事务只能瞧见已经提交事务所作的转变。其以免了脏读,但依然存在不成反复读和幻读题目

  4. repeatable read

    • MySQL的默许级别;确保统一事务的多个实例在并发读取数据时,会看到一样的数据行。以免了脏读和不成反复读,但是会致使另一个题目:幻读。幻读是指会员读取某一个范畴的数据行时,另一个事务又在该范畴插入了新行,当会员再读取该范畴的数据行时,会发明新的幻影行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC)机制解决了该题目

    • 可反复读的隔离级别下运用了MVCC机制,select操纵不会更新版本号,是快照读(历史版本);insert,update和delete会更新版本号,是目前读(目前版本)

  5. serializable

    • 最高隔离级别,通过强迫事务排序,使之不成能彼此冲突,从而解决幻读题目。简言之,它是在每个读的数据行上加上同享锁。在这个级别,可能致使批量的超时现象和锁竞争

设定事务隔离级别

  1. 在my.cnf文件设定

- READ-UNCOMMITTED
- READ-COMMITED
- REPEATABLE-READ
- SERIALIZABLE
* 例如
[mysqlId]
transaction-isolation = READ-COMMITTED
  1. 通过下令动态设定隔离级别

SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL 
其中isolation-level可以是:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE

GLOBAL|SESSION表示事务隔离级另外作用范畴:
GLOBAL:表示对所有会话有效
SESSION:表示对目前会话有效

事务并提问题

  1. 脏读:事务A读取了事务B更新的数据,然后B回滚操纵,那么A读取到的数据是脏数据

  2. 不成反复读:事务A屡次读取到统一数据,事务B在事务A屡次读取历程中,对数据做了更新并未提交,致使事务A屡次读取统一条数据,效果纷歧致

  3. 幻读:先后读取的效果数据条数纷歧致。这是由于事务A的屡次读取历程中,事务B对表进行插入或删除操纵

以上就是MySQL事务相干见识的细致介绍(代码示例)的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板