-1

我有一张桌子

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 表是否重要?

4

1 回答 1

0

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

于 2013-06-02T07:05:07.923 回答