MySQL事务相关笔记

这篇具有很好参考价值的文章主要介绍了MySQL事务相关笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

杂项

InnoDB最大特点:支持事务行锁

MyISAM不支持事务

介绍

一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库。事务有如下特性:

1.事务的所有SQL语句全部执行成功,才能提交(commit)事务,把结果写回磁盘上。

2.事务执行过程中,有的SQL出现错误,那么事务必须要回滚(rollback)到最初的状态。

ACID特性

  • 事务的原子性(Atomic)
  • 事务的一致性(Consistency)
  • 事务的隔离性(Isolation)

当两个或者多个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与其它事务的操作隔离起来,不被其它正在执行的事务所看到,使得并发执行的各个事务之间不能互相影响。

  • 事务的持久性(Durability)

事务完成(commit)以后,DBMS保证它对数据库中的数据的修改是永久性的,即使数据库因为故障出错,也应该能够恢复数据!

ACD特性是由mysql的undo log和 redo log 保证;

I特性是由mysql事务 锁机制保证;

mysql中最重要的是日志而不是数据。

事务相关指令

BEGIN; 开启一个事务

COMMIT; 提交一个事务

ROLLBACK; 回滚一个事务到初始的位置

SAVEPOINT point1; 设置一个名字为point1的保存点

ROLLBACK TO point1; 事务回滚到保存点point1,而不是回滚到初始状态

SET TX_ISOLATION='REPEATABLE-READ'; 设置事务的隔离级别

SELECT @@ TX_ISOLATION; 查询事务的隔离级别

实践例子

查看是否设置了自动提交:

MySQL事务相关笔记

事务并发存在的问题

  • 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。例如当事务A和事务B并发执行时,当事务A更新后,事务B查询读取到A尚未提交的数据,此时事务A回滚,则事务B读到的数据就是无效的脏数据。(事务B读取了事务A尚未提交的数据)
  • 不可重复读(NonRepeatable Read):一个事务的操作导致另一个事务前后两次读取到不同的数据。例如当事务A和事务B并发执行时,当事务B查询读取数据后,事务A更新操作更改事务B查询到的数据,此时事务B再次去读该数据,发现前后两次读的数据不一样。(事务B读取了事务A已提交的数据)
  • 虚读(Phantom Read)幻读:一个事务的操作导致另一个事务前后两次查询的结果数据量不同。(事务B读取了事务A新增加的数据或者读不到事务A删除的数据)

事务的隔离级别

MySQL支持的四种隔离级别是:

1、READ-UNCOMMITTED未提交读。说明在提交前一个事务可以看到另一个事务的变化。这样读脏数据,不可重复读和虚读都是被允许的。

2、READ-COMMITTED已提交读。说明读取未提交的数据是不允许的。这个级别仍然允许不可重复读和虚读产生。

3、REPEATABLE-READ可重复读。说明事务保证能够再次读取相同的数据而不会失败,但虚读仍然会出现。

4、SERIALIZABLE。串行化。是最高的事务级别,它防止读脏数据,不可重复读和虚读。(它相当于加了读写锁,某个会话读时,其他线程不能写)

MySQL事务相关笔记

注解

事务隔离级别越高,为避免冲突所花费的性能也就越多,降低并发度。

在“可重复读”级别,实际上可以解决部分的虚读问题,但是不能防止 update 更新产生的虚读问题,要禁止幻读产生,还是需要设置串行化隔离级别。文章来源地址https://www.toymoban.com/news/detail-487338.html

到了这里,关于MySQL事务相关笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL--InnoDB的一次更新事务实现流程与二阶段提交

    InnoDB更新事务流程 涉及内容 一次InnoDB的事务更新操作涉及Buffer Pool,BinLog,RedoLog,UndoLog和物理磁盘。 Buffer Pool: Buffer Pool是InnoDB引入的中间层:内存上的一块连续空间,用来缓存数据页,每个数据页的大小为16KB。它的存在是为了提高SQL的读写性能,避免每次查询和修改都直

    2024年02月02日
    浏览(43)
  • 请你来了解一下Mysql-InnoDB中事务的两段式提交

    A:原子性 原子性表示把一个事务中所有的操作视为一个整体,要么全部成功,要么全部失败,是事务模型区别文件系统的重要特征之一 C:一致性 官方对一致性的解释为事务将数据库从一种状态转变为下一种一致性状态,在事务开始之前和食物结束以后,数据库的完整性约

    2024年01月23日
    浏览(289)
  • MySQL系统表information_schema.INNODB_TRX详解及查看当前运行事务

    在日常管理数据库的过程中,有时需要查询MySQL数据库是否正在有正在执行的事务,便于排查业务问题。MySQL的系统库表有数据维护对应的信息,就在 information_schema 库中的 INNODB_TRX 表,包含事务中是否存在锁,事务开启时间,事务执行的语句等等。 SELECT * FROM information_schema

    2024年02月16日
    浏览(84)
  • 【Spring/MySQL数据库系列】数据库事务的特点与隔离级别

    ⭐️ 前面的话 ⭐️ 本文已经收录到《Spring框架全家桶系列》专栏,本文将介绍有关数据库事务的特点以及隔离级别。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由 未见花闻 原创, CSDN 首发! 📆首发时间:🌴2023年5月20日🌴 ✉️坚

    2024年02月05日
    浏览(55)
  • MySQL 8.0 Reference Manual(读书笔记63节--InnoDB Locking)

    To implement a large-scale, busy, or highly reliable database application, to port substantial【səbˈstænʃl】 code from a different database system, or to tune MySQL performance, it is important to understand InnoDB locking and the InnoDB transaction model. InnoDB implements【ˈɪmplɪments 实施; 执行; 贯彻; 使生效; 】 standard row-level lock

    2024年04月22日
    浏览(52)
  • MySQL 8.0 Reference Manual(读书笔记69节--InnoDB Startup Configuration)

    有些InnoDB的配置,是在实例初始化时,就决定了,所以,建议写在configuration file 文件中。 Because MySQL uses data file, log file, and page size settings to initialize InnoDB, it is recommended that you define these settings in an option file that MySQL reads at startup, prior to initializing InnoDB. Normally, InnoDB is initialize

    2024年03月24日
    浏览(60)
  • MySQL 8.0 Reference Manual(读书笔记80节-- InnoDB Row Formats)

    The row format of a table determines how its rows are physically stored, which in turn can affect the performance of queries and DML operations. As more rows fit into a single disk page, queries and index lookups can work faster, less cache memory is required in the buffer pool, and less I/O is required to write out updated values. The data in each table is

    2024年04月08日
    浏览(55)
  • MySQL 8.0 Reference Manual(读书笔记70节--InnoDB Buffer Pool Configuration)

    When increasing or decreasing innodb_buffer_pool_size , the operation is performed in chunks. Chunk size is defined by the innodb_buffer_pool_chunk_size configuration option, which has a default of 128M.-----innodb_buffer_pool_size的扩容和缩容,都是以innodb_buffer_pool_chunk_size为单位进行的,其默认为128M 。 Buffer pool size must always

    2024年03月24日
    浏览(52)
  • MySQL 8.0 Reference Manual(读书笔记75节--Optimizer Statistics for InnoDB (1))

    This section describes how to configure persistent and non-persistent optimizer statistics for InnoDB tables. Persistent optimizer statistics are persisted across server restarts【意思是重启操作,对这些数据没有影响】, allowing for greater plan stability and more consistent query performance. Persistent optimizer statistics also provide con

    2024年03月27日
    浏览(45)
  • MySQL 8.0 Reference Manual(读书笔记72节--InnoDB Buffer Pool Configuration (3))

    主要内容为【热启动】,就是把之前常用的内存数据,按照划定的比例快速重新加载到内存中。 To reduce the warmup period after restarting the server, InnoDB saves a percentage of the most recently used pages for each buffer pool at server shutdown and restores these pages at server startup. The percentage of recently used pa

    2024年03月24日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包