- 行锁的触发条件
- 当更新操作能精确定位到具体行(通常通过索引)时,多数数据库(如 MySQL 的 InnoDB)会使用行锁。
- 例如:
UPDATE users SET age = 30 WHERE id = 100;(id是主键),数据库会仅锁定id=100这一行。
- 特殊情况:行锁升级为表锁
- 如果更新操作没有使用索引(或索引失效),数据库无法精确定位到具体行,可能会升级为表锁,锁定整个表。
- 例如:
UPDATE users SET age = 30 WHERE name = '张三';(name无索引),此时可能触发表锁,阻塞其他事务对表的操作。
- 更新操作优先使用行锁,前提是通过有效索引精确定位到行。
- 行锁是数据库保证并发安全的重要机制,既能防止数据不一致,又能最大化并发性能。
- 避免无索引的更新操作,否则可能导致锁粒度变大(如升级为表锁),降低并发效率。
cookie存储在服务器端,seesion存储在服务器端
过滤器和拦截器优先级
过滤器(Filter)执行优先级高于拦截器(Interceptor)