跳至主要內容

051. 锁

chanchaw小于 1 分钟编程语言数据库mysql

概述

不要将锁和事务隔离级别混淆

concept

insert、update的行锁表锁

insert 自身带有行锁,即 java 中使用 insert 向 mysql 中写入数据时不用显示的给定或设置锁,insert 自动会锁定当前插入行 update 当用到索引时是行锁,如果没有使用到索引会导致表锁,所以 update 操作尽量要使用到索引,也是 mybatis 默认生成的修改语句都是 xxByPrimaryKey 的原因

慢动作验证锁

一般 mysql 默认安装后提交一行 SQL 语句都是自动提交的,要放慢速度查看所以的各种冲突,可以使用

set autocommit = 0;# 表示关闭自动提交,需要使用代码 commit; 手动提交
update goods set goods_name = '苹果味香蕉' where iid = 1;

同时新开一个页面执行SQL语句可以查看锁的冲突