【问题标题】:MySQL locking tablesMySQL 锁定表
【发布时间】:2012-03-18 05:36:07
【问题描述】:

我正在尝试做一个简单的锁,以防止任何其他请求读取或写入单个表。我的代码在phpmyadmin中输入并执行后的结果:

LOCK TABLES mytable WRITE;# MySQL returned an empty result set (i.e. zero rows).
INSERT INTO mytable (field1, field2) VALUES ('21',  '123123');# 1 row(s) affected.

锁不起作用,插入起作用。显然不能正常工作......我做错了什么?我一直在倾注 MySQL 文档,这似乎是他们所说的......

【问题讨论】:

  • 为什么说锁没用?锁定表语句不返回结果集。

标签: mysql concurrency locking phpmyadmin


【解决方案1】:

当您的会话在表上工作时,锁可以防止其他会话访问该表。如果在桌子上加一把锁也能把你自己的密码锁在外面,那么锁就没有意义了。

您必须使用两个连接对其进行测试。一个连接执行锁定,另一个连接尝试执行插入。

在 phpmyadmin 中完成所有操作,通过一个单一连接完成,这不是一个有效的测试。

【讨论】:

  • 哦,我明白了。 WRITE 也可以防止 READ 吗?
  • 是的。否则进行读取的其他会话可能会获得“陈旧”的数据。考虑一个质量很差的银行系统,在该系统中,您锁定某人的帐户记录以借记交易,而其他一些会话正在执行相同的读取操作,并且两者都获得相同的“原始”余额。现在,您有两次从最初的 100 美元借记,最终余额错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 2011-05-12
相关资源
最近更新 更多