在mysql中提供读写表锁定

时间:2013-05-29 21:24:55

标签: mysql concurrency locking innodb myisam

我有一张桌子

CREATE TABLE `uli` (
  `id` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

表格应始终在一行中包含一个值。但它可以经常改变。我想做一个选择,锁定表用于其他连接,更新值和解锁。 例如,以下代码非常出色:

LOCK TABLES uli WRITE;
SELECT * FROM uli;
UPDATE uli SET id=id+1;
UNLOCK TABLES;

虽然第一次连接没有解锁,但所有其他连接都会等待,只有在解锁后才能看到新值。这正是我想要的。它是否存在一些更优雅的解决方案?使用MyIsam或Innodb表格是否重要?

1 个答案:

答案 0 :(得分:0)

您正在锁定写入,这意味着选择在更新之前仍会看到旧值。你也没有对你的选择做任何事情。如果您使用InnoDB和SERIALIZABLE隔离级别,您只需要更新语句。