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

¿Esto bloquea la base de datos?

Para mí, la documentación es un poco confusa:

Métodos de bloqueo interno sugiere que, en algunas circunstancias, es posible insertar en una tabla MyISAM mientras otra sesión está leyendo:

Sin embargo, Problemas de bloqueo de tablas muestra una situación en la que la mesa estará bloqueada hasta que se complete la SELECCIÓN (esto encaja con su situación):

La tabla InnoDB implementa bloqueos a nivel de fila, por lo que solo se bloqueará la fila que se lee, en lugar de toda la tabla.

En lugar de confiar solo en la documentación, probé una pequeña prueba:

  1. Cree dos tablas con la misma estructura:table_a y table_b .
  2. Rellenar table_a con 500.000 filas.
  3. Copiar datos de table_a a table_b usando un INSERT INTO ... SELECT declaración.
  4. Durante el proceso de copia, use otra sesión para insertar una nueva fila en table_a .
  5. Comprueba si table_b contiene el nuevo registro.

Cuando ambas tablas eran MyISAM, table_b no contenía el nuevo registro después de la copia. Cuando ambas tablas eran InnoDB, table_b contenía el nuevo registro después de la copia. Repetí esto tres veces y, como era de esperar, el resultado fue el mismo cada vez.

Entonces, en resumen, si su mesa es MyISAM, estará bloqueada. Si es InnoDB, no lo hará. Por supuesto, esta prueba no considera actualizaciones, pero espero que los resultados sean similares.