1.它是用来进行数据并发访问时,保证数据同步的一种方式;
它是属于悲观锁的一种,悲观锁适用于数据库的写操作比较多的场景,更进一步划分属于意向排他锁;
上的锁会在该事务被commit或者rollback语句结束释放;
2.产生的锁:根据where的条件字段 是否是索引 + 是都有数据 ,可以产生 不上锁、行锁、表锁;
一般来讲,没有数据不会产生锁,有索引会产生行锁,无索引会产生表锁;
有几种特例:
1)根据几个字段一起查询,比如 id 为索引,name不为索引,id会产生行锁,name也会产生行锁;
begin;
select id,name from goods where id = 1 and name='name' for update;
commit;
2) 根据非索引字段查询,不管有没有产生数据,都会产生表锁;
3)查询条件为 模糊查询 ,无论是否查到数据,产生表锁;