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

Cuando INSERTO varias filas en una tabla MySQL, ¿se incrementarán las identificaciones en 1 cada vez?

La respuesta es:bueno, depende.

En el caso de myisam, la respuesta es definitivamente sí, ya que las secuencias de myisam insertan solicitudes.

Sin embargo, en el caso de innodb, el comportamiento es configurable desde mysql v5.1. antes de v5.1, entonces la respuesta para InnoDB también es sí, después de eso depende del innodb_autoinc_lock_mode entorno. Consulte la documentación de mysql en Configuración de incremento automático de InnoDB para obtener detalles .

Para darle los aspectos más destacados, hay 3 innodb_autoinc_lock_mode configuración:

  1. tradicional (0)
  2. consecutivo (1) - predeterminado
  3. intercalado (2)

Se pueden experimentar más brechas en el valor de auto_incremento, si una transacción se ha revertido. Una inserción masiva solo se puede revertir como un todo.

ACTUALIZACIÓN: Como se describió anteriormente, obtendrá escenario 1) o 2) , si usas

  • motor de tabla myisam
  • o innodb antes de mysql v5.1
  • o innodb con mysql v5.1 o posterior y el innodb_autoinc_lock_mode es 0 o 1

No hay forma de saber cuál se inserta primero.

Puede obtener escenario 3) o 4) si usas

  • innodb con innodb_autoinc_lock_mode 2

Una vez más, no hay forma de saber cómo y por qué mysql confunde el orden de los registros.

Por lo tanto, si su pregunta está relacionada con el hecho de que inserta 3 registros con inserción masiva y last_insert_id() devuelve el valor de incremento automático solo del primer registro insertado, y desea obtener las identificaciones de los otros 2 registros por simple adición es que usted es posible que deba verificar la configuración de mysql según el motor de tabla y la versión de mysql utilizada.