MySQL 的锁定和并发

2024-04-20

我目前正在将 Mysql 与 InnoDB 存储引擎用于所有表。

所以,我想知道这是否是一个真正的问题以及是否有解决方案。

例如,我将使用数据库事务向用户收费: 1.检查他的余额 2.减去他的余额 3.将此余额记入某处 4. 提交

如果更新发生在 #1 之后、2 和 3 之前,会发生什么情况。如果用户提款或购买其他东西,导致其余额为零。这会导致失去这种平衡。据我了解,步骤 #1 只会导致共享锁,不会阻止写入等。

对此有通用的解决方案吗?


你的标签表明你明白答案是什么——锁定。关系数据库(通常)实现事务的ACID属性,这保证了数据的一致性。在实践中,出于性能原因,这些有时会被放松,但大多数数据库都提供了一些方法来实现这一目标。

在 MySQL 中,锁定机制取决于底层存储引擎。 InnoDB 提供了几个选项,这些选项在文档 https://dev.mysql.com/doc/refman/5.6/en/innodb-lock-modes.html.

为了实现这些锁,你基本上有两个语法选项SELECT:

select . . . for update
select . . . lock in share mode

请注意,这些语句应该在显式事务中使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 的锁定和并发 的相关文章

随机推荐

  • 如何使用敏感数据运行 cron 作业?

    I read 在哪里可以设置 crontab 将使用的环境变量 https stackoverflow com questions 2229825 where can i set environment variables that cro
  • 如何正确使用CGPathApply

    我尝试使用 CGPathApply 迭代 CGPathRef 对象中的每个 CGPathElement 主要是编写一种自定义方法来保存 CGPath 数据 问题是 每次调用 CGPathApply 时 我的程序都会崩溃 根本没有任何信息 我
  • WebLogic Server 10.3.6 中的 JPA 2.0

    我需要使用 JPA 2 0 带有 EclipseLink 实现 问题是我还需要在实现 Java EE 5 规范的 WebLogic 10 3 6 服务器中部署此应用程序 因此不需要支持 JPA 2 我知道有可用于在此版本中添加对 JPA 2
  • 参数列表中的 void_t 可以工作,但不能作为返回类型

    cppreference 上有一个关于使用别名的示例 这个例子失败是因为int没有会员foo template
  • 使用 Apache2 的 NodeJS 应用程序有时会返回 503 服务器不可用

    风景 我有一个乌班图18 04DigitalOcean 中的服务器具有以下规格 1 vCPUs 1GB and 25GB磁盘 在这个服务器 我们称之为 API SERVER 中 我使用 PHP 和 NodeJS 在由 apache 管理的代
  • 何时处置?

    我对所有有关 IDispose 和 使用 语句的讨论感到困惑 我想知道是否有人可以告诉我在下面的测试示例中是否需要使用 using 语句或 IDispose 的某种实现 public class Main MyFile myFile new
  • resharper 单元测试继承

    有人有 Resharper 单元测试层次结构的策略吗 我通常使用 TestDriven Net 和 Resharper 的测试运行器以及 NUnit 测试 TestDriven 对所有事情都很棒 但很快就会从批量运行 可能是数千个 中找到一
  • WordPress 博客文章未显示 Facebook 预览图像

    我有一篇博客文章here http gingerslist com blog 62 smiles and understanding 2 当我在 Facebook 上分享此内容时 预览图像不显示 我尝试过重新抓取Facebook 开发者工具
  • 使用 SQLAlchemy 批量更新插入 [重复]

    这个问题在这里已经有答案了 我正在使用 SQLAlchemy 1 1 0b 将大量数据批量插入到 PostgreSQL 中 并且遇到了重复的键错误 from sqlalchemy import from sqlalchemy orm imp
  • 何时应使用以下各项:Amazon EC2、Google App Engine、Microsoft Azure 和 Salesforce.com? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是在非常普遍的意义上问这个问题 无论是从云提供商还是云消费者的角度来看 此外 问题不针对任何特定类型的应用程序 实际上 目的是了解哪种类型的应
  • 在 iPhone 中的应用程序中评价我在 iTunes 中的应用程序

    我必须在我的应用程序中提供一个链接 用户点击它就会将我带到应用程序的 itunes Appstore 页面 用户可以在其中对应用程序进行评分 我认为其他应用程序尝试访问设备中的Appstore应用程序并在itunes中传递该应用程序的相应u
  • PowerShell 5 中的写入主机与写入信息

    众所周知 Write Host是邪恶的 在PowerShell 5 Write Information被添加并被考虑替换Write Host 但是 说实话 哪个更好呢 Write Host是邪恶的 因为它不使用管道 因此输入消息无法被重用
  • 如何使用Android KeyStore安全存储任意字符串?

    我希望能够在 Android KeyStore 中安全地存储一些敏感字符串 我从服务器获取字符串 但我有一个用例需要我保留它们 KeyStore 只允许从与分配给我的应用程序相同的 UID 进行访问 并且它将使用设备主密码对数据进行加密 因
  • R Shiny Memory Leak - 有关如何查找的建议?

    我正在寻找有关如何识别 R 闪亮程序中内存泄漏的一般想法 我正在努力确定泄漏的确切位置 因此很难重新创建 而且我的代码已经超过 1000 行 我确信它与观察和观察事件有关 但我无法准确指出它 我实际上很喜欢 bborgeser 在这里提出的
  • 如何根据iOS上的touchMove事件在屏幕上绘制动态矩形

    矩形将被视为两个点 第一个点将是 touchBegan 点 在 touchMove 上将是第二个点 矩形将根据用户手指的移动动态绘制 就像当您单击桌面并移动桌面时 鼠标您将获得动态矩形 Thanks 好的 这是你如何绘制矩形的方法touch
  • 如何展平嵌套的Python字典?

    我正在尝试展平嵌套字典 dict1 Bob shepherd 4 6 3 collie 23 3 45 poodle 2 0 6 Sarah shepherd 1 2 3 collie 3 31 4 poodle 21 5 6 Ann sh
  • 尽管确实存在,但“不存在具有给定标识符的行”

    我正在使用 Hibernate 并得到 线程 main 中的异常 org hibernate ObjectNotFoundException 不存在具有给定标识符的行 271 这个错误的奇怪之处在于 具有给定 id 的对象存在于数据库中 我
  • 子进程超时失败

    我想在子进程上使用超时 from subprocess32 import check output output check output sleep 30 shell True timeout 1 不幸的是 虽然这会引发超时错误 但它会在
  • 时间数组在建模中超出范围?

    这些天我正在尝试使用新的气象数据 以 netcdf 格式而不是旧的 cray 格式给出 运行我的气候模型 模型编译顺利 但是当进行模拟时 模型在第一天运行良好 但在模拟的第二天就停止了 总是在同一时间步长 无论我使用哪个开始日期 错误是 f
  • MySQL 的锁定和并发

    我目前正在将 Mysql 与 InnoDB 存储引擎用于所有表 所以 我想知道这是否是一个真正的问题以及是否有解决方案 例如 我将使用数据库事务向用户收费 1 检查他的余额 2 减去他的余额 3 将此余额记入某处 4 提交 如果更新发生在