我正在为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;
答案 0 :(得分:0)
您如何确定它没有锁定记录?
当在具有锁定的表上运行查询时,它将等待锁定被释放或最终超时。您的更新事务发生得如此之快,以至于您甚至无法判断它已被锁定。
您能够告诉问题的唯一方法是,如果您在事务开始后运行了查询,但是返回了用户的原始值而不是更新的值。那发生了吗?
我会把它放在评论中但是时间太长了,但我会根据您的回复更新完整的答案。
答案 1 :(得分:0)
MySql使用多版本的并发控制by default(这是一种非常非常好的行为,而不是MSSQL)。尝试使用locking reads(锁定共享模式)来达到你想要的效果。