首页 > 数据库 >MySQL事务

MySQL事务

时间:2023-05-04 17:37:03浏览次数:52  
标签:事务 5.7 存储 修改 引擎 MySQL 操作

前序

原文链接1:https://cloud.tencent.com/developer/article/1899373

MySQL有9种存储引擎,不同的引擎,适合不同的场景,常用引擎为InnoDB,它是MySQL的默认存储引擎。

登录MySQL,执行show engines可以查询MySQL支持的存储引擎,如图示:

MySQL事务_锁机制

1、InnoDB引擎

(1)它事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。缺点以损失效率来保证数据的一致性。

(2)存储表和索引有两种形式:

        A:使用共享表空间存储:所有的表和索引存放在同一个表空间中。

        B:使用多表空间存储:表结构放在frm文件,数据和索引放在IBD文件中。分区表的每个分区对应单独的IBD文件,使用分区表的好处在于提升查询效率。

2、MyISAM引擎

没有事务,拥有较高的插入、查询速度,每个MyISAM在磁盘上存储成三个文件

(1)frm文件:存储表的定义数据

(2)MYD文件:存放表具体记录的数据。

(3)MYI文件:存储索引

3、MEMORY

MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。每一个表实际上和一个磁盘文件关联,文件是frm。支持的数据类型有限制(不支持TEXT和BLOB类型)

(1)支持的锁粒度为表级锁。所以在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈。

(2)由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失

(3)MEMORY存储引擎支持HASH和BTREE索引。

问题及描述

问题一:

两个程序同时读取mysql5.7表中某一行记录,一条做编辑操作,一条做修改操作,mysql5.7是否默认自带有加锁机制?如果有,那默认的锁机制是什么?

MySQL 5.7 默认使用行级锁机制,即在对行数据进行修改、删除等操作时,只会锁定该行数据,而不是整张表,因此可以支持更高的并发性和可扩展性。

在上述情况下,当两个程序同时读取 MySQL 5.7 表中某一行记录并进行编辑和修改操作时,MySQL 5.7 会自动加锁,保证并发操作的正确性和一致性。具体来说,MySQL 5.7 会根据事务的隔离级别和操作类型,自动加上相应的锁,以保证数据的一致性和完整性。

在默认情况下,MySQL 5.7 采用的是可重复读(REPEATABLE READ)隔离级别,即在事务开始时,会将当前的数据快照存储在事务中,事务中的所有操作都是基于这个快照进行的,所以可以避免脏读、不可重复读和幻读等问题。对于修改操作,MySQL 5.7 会自动加上排他锁(X锁),防止其他事务修改该行数据,对于编辑操作,MySQL 5.7 会自动加上共享锁(S锁),防止其他事务同时进行编辑操作。当事务提交或回滚后,MySQL 5.7 会自动释放相应的锁,以保证数据的一致性和完整性。

问题二:

当两个程序同时读取Mysql5.7表中某一行记录并进行编辑和修改操作,这个编辑和修改不是同一个操作么?

对于MySQL 5.7中的行级锁机制来说,编辑和修改操作不是同一个操作。具体来说,编辑操作和修改操作都会对该行数据进行操作,但是它们的操作类型不同,因此 MySQL 5.7 会根据操作类型自动加上相应的锁。

编辑操作一般是指对该行数据进行读取,但不会对数据进行修改,因此 MySQL 5.7 会自动加上共享锁(S锁),以防止其他事务修改该行数据。而修改操作则是指对该行数据进行更新、删除等操作,因此 MySQL 5.7 会自动加上排他锁(X锁),以防止其他事务同时进行修改操作。因此,在两个程序同时读取 MySQL 5.7 表中某一行记录并进行编辑和修改操作时,它们的操作类型不同,MySQL 5.7 会自动加上相应的锁,以保证数据的一致性和完整性。






标签:事务,5.7,存储,修改,引擎,MySQL,操作
From: https://blog.51cto.com/u_2487980/6243647

相关文章

  • docker mysql 容器自动停止 -- docker update
    原因:mysql容器占用资源过高被系统杀死解决方法dockerupdate-m500M--memory-reservation500M--memory-swap1000M容器id/容器名说明-m限制内存最大值--memory-reservation是弹性控制内存大小,防止损失性能,建议要开。当宿主机资源充足时,允许容器尽量多地使......
  • PHP基础--mysqli的事务处理
    <?php//在命令行中:默认创建的表类型为MyISAM表类型,是不支持事务的//在命令行中建表时添加type=InnoDB,默认自动提交事务autocommit,不能回滚//创建连接对象$mysqlConn=newmysqli("localhost","root","root","test");if($error=$mysqli->connect_error){die("......
  • mysql - shell 执行 sql 文件有中文乱码-解决
    1.背景执行  发现部分中文乱码2.解决在执行sql语句之前,加入下面指令即可SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0; ......
  • springboot与mongodb之事务管理(二)
    一、事务说明1、在4.0版本中,MongoDB支持副本集上的多文档事务,分片集群是不支持事务的,会报以下异常TransactionsarenotsupportedbytheMongoDBclustertowhichthisclientisconnected2、在版本4.2中,MongoDB引入了分布式事务,在副本集或分片集群上都是支持事务的。3......
  • MySQL 8.0半同步复制-net_flush()失败
    MySQL8.0.26做的增强半同步复制,log-error日志中出现如下报错:2021-12-28T14:04:24.663005+08:0011[ERROR][MY-011161][Repl]Semi-syncmasterfailedonnet_flush()beforewaitingforreplicareply.2021-12-28T14:51:49.217811+08:00413824[ERROR][MY-011161][Repl......
  • 一条SQL如何被MySQL架构中的各个组件操作执行的?
    摘要:一条SQL如何被MySQL架构中的各个组件操作执行的,执行器做了什么?存储引擎做了什么?表关联查询是怎么在存储引擎和执行器被分步执行的?本文带你探探究竟!本文分享自华为云社区《一条SQL如何被MySQL架构中的各个组件操作执行的?》,作者:砖业洋__。1.单表查询SQL在MySQL架构中的各个组......
  • mysql使用基础
    MYSQL学习,冲冲冲数据库学习的重要性是:各个网站媒体依赖的数据存储在数据库内。数据库:用来存储和管理数据的技术。在研发岗内需要使用,在面试题内出现--重要性。学习sql语言,使用mysql数据库,学习内容包括:事务,存储引擎,索引,sql优化,锁,日志,主从复制,读写分离,分库分表。基础篇:mysql概......
  • mac 创建Mysql数据库
    一、安装Mysql1、在mac上可以使用homebrew来安装mysql,打开终端输入命令brewinstallmysql2、安装完成之后,需要启动mysql服务brewservicesstartmysql3、mysql服务启动后,可以登录mysqlmysql-uroot-p注意⚠️首次登录时,需要设置root用户密码二、创建新的数据库1......
  • mysql学习笔记(动力节点)
    1.连接数据库1.1命令行连接mysql-uroot-p123456--连接flushprivileges;--刷新权限--所有的命令都采用分号结尾,切换不需要showdatabases;--查看所有的数据库mysql>useschool--切换数据库:use+数据库名Databasechangedshowtables;--查看数据库所有的表d......
  • mysql8备份恢复
    rpm-ivhhttps://repo.percona.com/yum/release/7/RPMS/x86_64/qpress-11-1.el7.x86_64.rpm1、解压成流文件xbstream-x<backup-2022-07-29-13.xbstream-C/data/backmysql/2、还原正常MySQL文件xtrabackup--decompress--remove-original--parallel=4--target-dir=/dat......