MYSQL 事务,FOR UPDATE 导致表锁

loyuu 2013-08-21 12:54:48
表中有主键的,好似不是这个原因。。。

开始事务

SQL句子 查用户名 后加 for update

延迟 10000秒

保存事务

在查询窗口中,测试另一个句子,查询 其它用户名 ,导致等待,,显然是表锁死了。。。 为什么??
...全文
661 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2013-08-21
  • 打赏
  • 举报
回复
引用 2 楼 loyuu 的回复:
[quote=引用 1 楼 trainee 的回复:] 一个进程for update 时, 其他进程是不能读的,会一直等待到前一个进程的事务结束。
可我查资料说,for update 是行锁,只是锁查询到的行[/quote] 产生行锁是需要你执行的语句的where条件是有索引的 另外在mysql的默认隔离级别 查询是不锁的 除非现实加lock in share mode
rucypli 2013-08-21
  • 打赏
  • 举报
回复
帖出来语句啊
yumenfeiyu945 2013-08-21
  • 打赏
  • 举报
回复
mysql的行锁是基于索引,如果select语句没有使用索引,是会变成表锁的
trainee 2013-08-21
  • 打赏
  • 举报
回复
如果是不同行的话,我用客户端mysql测试是不等待的。 更正一下,另一个进程如果是普通的select, 即使是同一行也不上锁, 除非加for update, lock in ...
loyuu 2013-08-21
  • 打赏
  • 举报
回复
我的数据表是INNODB
loyuu 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 trainee 的回复:
一个进程for update 时, 其他进程是不能读的,会一直等待到前一个进程的事务结束。
可我查资料说,for update 是行锁,只是锁查询到的行
trainee 2013-08-21
  • 打赏
  • 举报
回复
一个进程for update 时, 其他进程是不能读的,会一直等待到前一个进程的事务结束。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧