死锁是指多个过程互相等候而无法执行的现象。在 mysql 中,死锁通常发生在升级同一行或多行数据时。重现死锁的流程:建立数据表并插入数据。打开2个事务并设置锁。试着升级同一行。递交事务。mysql 根据回滚其中一个事务去解决死锁。避免死锁的方法包括减少事务时长、使用相同的升级次序及使用开朗并发控制。
zvvq.cn
MySQL 死锁的重现 内容来自samhan666
死锁界定 内容来自samhan
死锁是指两个或多个过程互相等候,最终导致系统没法执行的现象。在 MySQL 中,死锁通常发生在多个进程同时试着升级同一行或多行数据时。
怎样重现死锁
您可以通过以下步骤在 MySQL 中重现死锁:
建立数据表:
CREATETABLEtest( zvvq好,好zvvq
idINTNOTNULLAUTO_INCREMENT,
zvvq.cn
nameVARCHAR(255)NOTNULL,
PRIMARYKEY(id) 本文来自zvvq
); zvvq
插入数据: 内容来自samhan666
INSERTINTOtest(name)VALUES(John);
本文来自zvvq
INSERTINTOtest(name)VALUES(Jane);
打开2个事务:
内容来自zvvq
BEGIN;
获得锁:
内容来自samhan
让事务 1 锁住第一行:
UPDATEtestSETname=JohnUpdatedWHEREid=1; copyright zvvq
让事务 2 锁住第二行: copyright zvvq
UPDATEtestSETname=JaneUpdatedWHEREid=2; zvvq好,好zvvq
试着升级同一行: zvvq.cn
让事务 1 试着升级第二行: zvvq.cn
UPDATEtestSETname=JohnUpdatedWHEREid=2;
让事务 2 试着升级第一行: zvvq
UPDATEtestSETname=JaneUpdatedWHEREid=1;
内容来自samhan666
递交事务: zvvq好,好zvvq
COMMIT;
假如一切正常,这俩事务都会成功递交。可是,如果两个事务同时试着升级同一行,也会发生死锁。 copyright zvvq
死锁检验
copyright zvvq
当出现死锁时,MySQL 会检测到并回滚其中一个事务。您可以通过查询错误日志来确定死锁: zvvq好,好zvvq
innodb_status:lockwaittimeoutexceeded;tryrestarttransaction 本文来自zvvq
避免死锁
内容来自zvvq,别采集哟
为了避免死锁,您可以采用以下方法: zvvq
保证事务尽量短。始终使用相同的次序更新表。应用开朗并发控制,而非消极并发控制。以上就是mysql死锁如何重现的详细内容,大量请关注其他类似文章!
zvvq