悲觀鎖
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. 使用綁定鏈接
複製代碼