不用select for update,那么select的时候 就不会加独占锁,并发情况下肯定是问题的。建议你直接在update语句和select合并到一个sql中
mysql的innodb自动就是行级锁。当时,也有一个前提,就是你的查询条件也的有索引,否则和表级锁没区别,每一行都锁住了,就和锁住整个表一样的效果了。问题是我看到说,如果select for update语句中查询条件没有主键,就会是表级锁。然而主键是无意义的自增数字呀,一般不会出现在查询条件里
select for update,有WHERE条件吧,WHERE条件的字段应该 有索引吧,FOR UPDATE加的是X锁,是可以行锁的,别的读不了,事务结束后,马上提交或回滚
mysql的innodb自动就是行级锁。当时,也有一个前提,就是你的查询条件也的有索引,否则和表级锁没区别,每一行都锁住了,就和锁住整个表一样的效果了。问题是我看到说,如果select for update语句中查询条件没有主键,就会是表级锁。然而主键是无意义的自增数字呀,一般不会出现在查询条件里实际上并没有锁表。我做了实验,在查询条件中不包含主键后者索引时,我启用另一个回话还是可以update数据的,所以这一点证明并没有锁住整个表。
mysql的innodb自动就是行级锁。当时,也有一个前提,就是你的查询条件也的有索引,否则和表级锁没区别,每一行都锁住了,就和锁住整个表一样的效果了。
不用select for update,那么select的时候 就不会加独占锁,并发情况下肯定是问题的。建议你直接在update语句和select合并到一个sql中
mysql的innodb自动就是行级锁。当时,也有一个前提,就是你的查询条件也的有索引,否则和表级锁没区别,每一行都锁住了,就和锁住整个表一样的效果了。问题是我看到说,如果select for update语句中查询条件没有主键,就会是表级锁。然而主键是无意义的自增数字呀,一般不会出现在查询条件里
mysql的innodb自动就是行级锁。当时,也有一个前提,就是你的查询条件也的有索引,否则和表级锁没区别,每一行都锁住了,就和锁住整个表一样的效果了。问题是我看到说,如果select for update语句中查询条件没有主键,就会是表级锁。然而主键是无意义的自增数字呀,一般不会出现在查询条件里实际上并没有锁表。我做了实验,在查询条件中不包含主键后者索引时,我启用另一个回话还是可以update数据的,所以这一点证明并没有锁住整个表。