gpt4 book ai didi

mysql - MySQL 何时在更新 InnoDB 表时锁定一行?

转载 作者:IT老高 更新时间:2023-10-29 00:01:04 25 4
gpt4 key购买 nike

如果我有这个多重更新查询

UPDATE user u
INNER JOIN user_profile up ON up.user_id = u.id
SET u.name = 'same_name_i_already_had', up.profile.age = 25
WHERE u.id = 10

假设 user 表中的第 10 行已经有名称“same_name_i_already_had”,所以它不应该被更新。

另一方面,user_profile 表中的行有不同的年龄,所以 MySQL 应该更新它。

假设 MySQL 为 RDBMS,InnoDB 其行级锁定系统作为两个表的引擎,

MySQL 是否将行锁定在用户表,尽管不必更新该行的名称字段?

最佳答案

它确实锁定了 user 中的行。您可以使用出色的 innotop 来验证这一点工具。

  • 运行 innotop 并按“L”键以显示 InnoDB 锁的屏幕。
  • 打开另一个 session ,登录 MySQL 并开始交易。
  • 执行您显示的更新,但不要提交。
  • 查看 innotop 屏幕中的锁。

例如,我在运行 MySQL 5.5 的测试虚拟机上创建了表 user 和 user_profile,并执行了上面列出的步骤。这是输出:

[RO] Locks (? for help) localhost, 08:34.568, InnoDB 10s :-), 0.10 QPS, 2/0/0 con/run/cac thds, 5.5.

__________________________________________ InnoDB Locks __________________________________________
ID Type Waiting Wait Active Mode DB Table Index Ins Intent Special
2 TABLE 0 00:00 02:35 IX test user 0
2 RECORD 0 00:00 02:35 X test user PRIMARY 0 rec but not gap
2 TABLE 0 00:00 02:35 IX test user_profile 0
2 RECORD 0 00:00 02:35 X test user_profile PRIMARY 0 rec but not gap

关于mysql - MySQL 何时在更新 InnoDB 表时锁定一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com