【问题标题】:provide read and write table locking in mysql在mysql中提供读写表锁定
【发布时间】:2013-05-29 21:24:54
【问题描述】:

我有一张桌子

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

【问题讨论】:

    标签: mysql concurrency locking innodb myisam


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多