悲观锁定记录?

时间:2012-06-06 17:50:13

标签: c# mysql pessimistic-locking rowlocking

我正在为Silverlight应用程序创建一个WCF Web服务,我需要在修改时将记录设置为读/写锁定。

我使用的是MySQL 5.5.11。

更具体地说,我想阻止请求在修改时从行读取数据。

UPDATE和SELECT的两个SQL命令实际上非常简单,如:

更新(应锁定写入/读取):

UPDATE user SET user = ..... WHERE id = .....

选择(从上面的查询锁定时不应该读取):

SELECT * FROM user WHERE id = .....

这是我尝试的但它似乎没有工作或锁定任何东西:

START TRANSACTION;
   SELECT user
   FROM user
   WHERE id = 'the user id'
   FOR UPDATE;

   UPDATE user
   SET user = 'the user data'
   WHERE id = 'the user id';
COMMIT;

2 个答案:

答案 0 :(得分:0)

您如何确定它没有锁定记录?

当在具有锁定的表上运行查询时,它将等待锁定被释放或最终超时。您的更新事务发生得如此之快,以至于您甚至无法判断它已被锁定。

您能够告诉问题的唯一方法是,如果您在事务开始后运行了查询,但是返回了用户的原始值而不是更新的值。那发生了吗?

我会把它放在评论中但是时间太长了,但我会根据您的回复更新完整的答案。

答案 1 :(得分:0)

MySql使用多版本的并发控制by default(这是一种非常非常好的行为,而不是MSSQL)。尝试使用locking reads(锁定共享模式)来达到你想要的效果。