MySql ~ Preguntas de la entrevista Escriba un ejemplo de bloqueo de transacciones en el motor InnoDB

Punto muerto

  • El llamado punto muerto son las cuatro condiciones necesarias que deben ocurrir en el siguiente
  1. Condiciones de exclusión mutua de recursos
  2. Mantener y solicitar condiciones
  3. Condición inalienable
  4. Condición de espera de bucle
  • En definitiva, los recursos a los que se accede son mutuamente excluyentes, es decir, son recursos no preferentes o consumibles.
  • Varias transacciones ya han ocupado recursos y desean obtener otros recursos, los recursos ocupados son inalienables y los recursos a los que desea acceder se ciclan y esperan
  • Por ejemplo, el siguiente ejemplo

Construye una mesa

CREATE TABLE `test1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
  • id índice de clave primaria

Cliente uno

--T1时刻
BEGIN;
 
--行级锁 id=1 的记录
select * from test1 where id=1 for update ;
 
--T3时刻
--更新 id=2 的记录
update test1 set id=5 where id=2;

Cliente dos

--T2时刻
BEGIN;
 
--行级锁 id=2 的记录
select * from test1 where id=2 for update ;
 
--T4时刻
--更新 id=1 的记录
update test1 set id=6 where id=1;
  • resultado de la operación
update test1 set id=5 where id=1
> 1213 - Deadlock found when trying to get lock; try restarting transaction
> 时间: 0.002s

análisis

La terminal 1 agrega un bloqueo exclusivo al registro con id = 1 en la tabla test1 en el momento T1

La terminal 2 agrega un bloqueo exclusivo al registro de id = 2 en la tabla test1 en T2

El terminal actualizará el registro con id = 2 en la tabla test1 en el momento T3. En este momento, el registro de fila se ha agregado con un bloqueo exclusivo y no se puede realizar la operación de actualización. Necesita esperar el bloqueo para ser lanzado.

La terminal 2 actualizará el registro con id = 1 en la tabla test1 en el momento T4. En este momento, el registro de fila se ha agregado con un bloqueo exclusivo y no se puede realizar la operación de actualización. Debe esperar el bloqueo para ser lanzado.

...

Las dos transacciones esperan a que se libere el bloqueo exclusivo de la otra, por lo que se produce un interbloqueo

Supongo que te gusta

Origin blog.csdn.net/Shangxingya/article/details/113774808
Recomendado
Clasificación