悲观锁
set autocommit=0;
# 设置完autocommit后,咱们就能够执行咱们的正常业务了。具体以下:
# 1. 开始事务
begin;/begin work;/start transaction; (三者选一就能够)
# 2. 查询表信息
select status from TABLE where id=1 for update;
# 3. 插入一条数据
insert into TABLE (id,value) values (2,2);
# 4. 修改数据为
update TABLE set value=2 where id=1;
# 5. 提交事务
commit;/commit work;
复制代码
乐观锁
update TABLE
set value=2,version=version+1
where id=#{id} and version=#{version};
复制代码
死锁
第一种:
mysql
show OPEN TABLES where In_use > 0;
复制代码
show processlist
复制代码
3.杀死进程id(就是上面命令的id列)sql
kill id
复制代码
第二种:
数据库
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
复制代码
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
复制代码
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
复制代码
1. 按同一顺序访问对象。
2. 避免事务中的用户交互。
3. 保持事务简短并在一个批处理中。
4. 使用低隔离级别。
5. 使用绑定链接
复制代码