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

¿INSERT IGNORE bloquea la tabla incluso si ignora la inserción?

Depende del motor:MyIsam e InnoDb se comportan de manera diferente.

Para las tablas de MyIsam, si ya existe un registro en la tabla (incluso si aún no está confirmado), un INSERT regular del mismo registro ( la misma clave única) en la otra sesión informa un error de clave duplicada, por lo que INSERT IGNORE simplemente ignora el error y continúa.

En la tabla InnoDB, si el registro no está bloqueado, INSERT normal lo hará inmediatamente informar el error de clave duplicada (INSERTAR IGNORAR omitirá el error y continuará).
Pero si el registro está bloqueado por la otra sesión (por ejemplo, el registro está insertado pero no confirmado todavía, o el registro está bloqueado por una ACTUALIZAR o ELIMINAR o SELECCIONAR PARA ACTUALIZAR), el comando INSERTAR se "colgará" y esperará hasta que la otra sesión elimine el bloqueo (mediante COMMIT o ROLLBACK). Luego, si el registro aún existe después de eliminar el bloqueo, INSERT informará el error (INSERT IGNORE ignorará el error), pero si el registro no existe, INSERT agregará este registro a la tabla.

La palabra clave IGNORE simplemente dice "en caso de cualquier error, simplemente ignórelo y continúe", pero no afecta el comportamiento de bloqueo.