sql >> Base de Datos >  >> RDS >> Mysql

Impedir lectura al actualizar la tabla

Suponiendo que utiliza un motor transaccional (generalmente Innodb), borre y rellene la tabla en la misma transacción.

Asegúrese de que sus lectores utilicen READ_COMMITTED o un nivel de aislamiento de transacciones superior (el valor predeterminado es REPEATABLE READ, que es superior).

De esa forma, los lectores podrán seguir leyendo el contenido antiguo de la tabla durante la actualización.

Hay algunas cosas de las que hay que tener cuidado:

  • Si la tabla es tan grande que agota el área de reversión, esto es posible si actualiza la totalidad de (digamos) una tabla de 1 millón de filas. Por supuesto, esto se puede ajustar, pero hay límites
  • Si la transacción falla a la mitad y se revierte, la reversión de grandes transacciones es MUY ineficiente en InnoDB (está optimizada para confirmaciones, no reversiones)
  • Tenga cuidado con los interbloqueos y los tiempos de espera de bloqueo, que son más probables si utiliza grandes transacciones.