for update:

当语句运行时,会在对应行(where子句)加上行级锁,无where子句等于全表上锁。若遇到客户端断网、测试人员忘记提交\回滚事务,则会发生锁表。 

rowid: 运行后并未给数据加上行级锁(通过物理地址去确定某一行数据),但可以编辑数据,提交事务的瞬间完成上锁、提交、解锁等动作,不易发生锁表。

 

for update不如select a.*,a.rowid from t,因为前者可能会造成锁表,后者不会锁表;