日期:2014-05-17  浏览次数:20856 次

UPDATE tablename SET s="locked" WHERE s="unlocked" AND id=x;能有行锁的效果么?
实用性可能会差点。不过我刚才试了一下,配合其他的东西好像是实现行锁定和行锁定检测的功能了,就是看SQL语句是否执行成功了以及影响的行数。
这种锁定方法成功的关键是单条SQL语句的原子性,如果能保证这个的话,理论上应该是可行的。我之前问过了,单条SQL语句的原子性应该是可以保证的。
我就想问一下这种行锁的方法是否在所有情况下都是有效的,毕竟有一些数据库不支持行锁。如果这种锁定方法在任何数据库管理软件中都有效的话,那么这种方法应该还是有点价值的。不过一般支持并发的数据库都会支持锁定吧?如果是这样的话这种方法是不是就是没有存在的价值了?就算不支持并发也是有行锁定的需求的吧?这个不太了解。据我所知MyISAM是不支持行锁的,那么这种方法是否可以用在MyISAM上呢?

------解决方案--------------------
必须是行锁   前提是你的id上必须有索引
另外mysql的行锁其实锁定的是对应的索引块
------解决方案--------------------
id是主键当然也是索引啊
------解决方案--------------------
行锁的前提是MYSQL必须知道是哪一行。这个是通过索引来确定的。