Saltar al contenido

Columnas MySQL y AUTO_INCREMENT en índice de varias columnas para tablas InnoDB: ¿estado de soporte?

Deseamos compartirte la mejor respuesta que descubrimos por todo internet. Nosotros esperamos que te sea de mucha ayuda y si quieres comentarnos alguna mejora hazlo con libertad.

Solución:

En circunstancias normales, habría cerrado esta pregunta como un duplicado. Ya hay votos cerrados. En este caso particular, dado que ofrece una recompensa por esta pregunta, intentaré responderla lo mejor que pueda.

Mira el primer post que mencionas. Tenga en cuenta la definición de la tabla

CREATE  TABLE `issue_log` (
`sr_no` INT NOT NULL AUTO_INCREMENT ,
  `app_id` INT NOT NULL ,
  `test_id` INT NOT NULL ,
  `issue_name` VARCHAR(255) NOT NULL ,
primary key (app_id, test_id,sr_no)
);

La columna auto_increment es sr_no. Esta no es la única columna ni la columna más a la izquierda en la primaria key definición. Ahora bien, si la primaria key fue escrito

primary key (sr_no, app_id, test_id)

entonces sr_no estaría más a la izquierda. No se habría producido ningún error con InnoDB.

Cuando ejecutó el comando

CREATE TABLE `tbl1` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `data` datetime NOT NULL,
  PRIMARY KEY (`id`,`data`)
) ENGINE=InnoDB;

su columna de auto_incremento id estaba más a la izquierda.

Hiciste referencia a una segunda publicación. Tenga en cuenta que en la respuesta a esa segunda publicación, se indica claramente que los motores de almacenamiento MyISAM y BDB admiten ID de incremento automático. Cuando se trata de MyISAM, el comportamiento de incremento automático permite emparejar un número de incremento automático con uno o más keys de tal forma que el número 1 puede aparecer varias veces pero estar asociado de forma única a las columnas. He discutido esto varias veces a lo largo de los años:

  • Apr 21, 2012 : ¿Cómo puede tener dos columnas autoincrementales en una tabla?
  • Jun 10, 2012 : MySQL obtiene el siguiente valor único sin incremento automático
  • Feb 26, 2013 : Cómo usar 2 columnas de incremento automático en MySQL phpmyadmin
  • Aug 28, 2013 : ¿Cómo modelar el objeto principal de la relación?

Tenga en cuenta que si bien InnoDB admite una columna de incremento automático en un PRIMARY KEY existe, no tiene el mismo comportamiento de incremento automático que MyISAM. MyISAM puede vincularse con otras columnas para permitir que un número exista varias veces, InnoDB no hace eso. Una vez que se usa un valor de incremento automático, es único para toda la tabla.

El extracto que encontraste

una tabla InnoDB con una columna AUTO_INCREMENT requiere al menos una key donde la columna de incremento automático es la única columna o la más a la izquierda.

proviene de una página en la documentación de MySQL que tiene que ver con cómo la replicación ve y maneja los valores de auto_incremento. Este es un tema vital, ya que los datos del pedido que se escriben en un Maestro pueden serializarse en un orden diferente en un Esclavo.

Recientemente (de nuevo en Jun 16, 2017) Respondí ¿Alguna vez tiene sentido crear un índice con columnas adicionales después del principal? key?, donde mencioné en la Documentación de MySQL que cuando hay una columna de incremento automático en una tabla particionada, es obligatorio que la columna esté incluida en el PRIMARY KEY junto con las columnas que definen la fragmentación de las filas de la tabla.

Para concluir, permítanme decir esto: soporte para columnas de incremento automático en un PRIMARY KEY en InnoDB no viene con ningún beneficio adicional o campanas y silbatos adicionales como lo hace con MyISAM. Es por eso que la documentación de MySQL no tiene mucho escrito al respecto.

El soporte para esto se mencionó hace mucho tiempo. Si busca en la documentación de MySQL 5.1 en InnoDB Restrictionsverá el punto n.º 15

Para una columna AUTO_INCREMENT, siempre debe definir un índice para la tabla, y ese índice debe contener solo la columna AUTO_INCREMENT. En las tablas MyISAM, la columna AUTO_INCREMENT puede ser parte de un índice de varias columnas.

Hay cosas más extensas en la Documentación de MySQL 5.1 AUTO_INCREMENT Manejo en InnoDB. También está disponible en la documentación de MySQL 5.5. Desafortunadamente, estos están en el antiguo formato de Documentación. Esta es probablemente la razón por la que no puedes encontrar nada ahora. Solo tenga la seguridad de que el apoyo está ahí.

Aquí puedes ver las comentarios y valoraciones de los usuarios

Nos puedes añadir valor a nuestro contenido cooperando tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *