auto_increment mysql primary-key innodb

reset auto_increment mysql



Mysql Innodb: Autoincrement no clave principal (3)

A partir de MySQL 5.5, parece ser posible sin un índice o clave principal un campo INT que se proporcionará con autoincremento.

¿Es posible auto-incrementar una clave no primaria?

Tabla "book_comments"

book_id medium_int timestamp medium_int user_id medium_int vote_up small_int vote_down small_int comment text comment_id medium_int Primary key -> (book_id, timestamp, user_id)

No habrá otros índices en esta tabla. Sin embargo, me gustaría hacer que la columna comment_id se autoincremente para poder crear fácilmente otra tabla:

Tabla "book_comments_votes"

comment_id (medium_int) user_id (medium_int) Primary key -> (comment_id, user_id)

Los usuarios solo podrán votar una vez por comentario de libro. Esta tabla impone esta regla por la clave principal.

Pregunta:

¿Es posible auto-incrementar una clave no primaria - como en, auto-incrementar la columna comment_id en la tabla "book_comments"?

Alternativas, Discusión:

Me gustaría hacer esto por simplicidad como se explicó anteriormente. Las alternativas no son prometedoras.

  • Cree el PK commnet_id y aplique la integridad a través de un índice único en book_id, timestamp, user_id . En este caso, me gustaría crear un índice adicional.
  • Mantenga el PK y reemplace el comment_id en book_comments_votes con el PK completo. Esto más que triplicaría el tamaño de la tabla.

Sugerencias? ¿Pensamientos?


Sí tu puedes. Solo necesitas hacer que esa columna sea un índice.

CREATE TABLE `test` ( `testID` int(11) NOT NULL, `string` varchar(45) DEFAULT NULL, `testInc` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`testID`), KEY `testInc` (`testInc`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; insert into test( testID, string ) values ( 1, ''Hello'' ); insert into test( testID, string ) values ( 2, ''world'' );

Insertará filas con valores de incremento automático para ''testInc''. Sin embargo, esto es algo muy tonto que hacer.

Ya dijiste la forma correcta de hacerlo:

"Haga el comment_id PK y haga cumplir la integridad a través de un índice único en book_id, timestamp, user_id".

Esa es exactamente la forma en que deberías hacerlo. No solo le proporciona una clave principal adecuada para la tabla que necesitará para futuras consultas, sino que también satisface el principio de menos asombro .


Tienes mesa existente. Si ya le dio una clave principal a comment_id y el único propósito es establecer auto_increment. Puede soltar la clave principal a esa columna. MySQL permite que una columna con cualquier propiedad clave pueda acceder a auto_increment. Así que mejor intente un índice o unique key para comment_id como a continuación.

1. Eliminar la llave primaria

ALTER TABLE `book_comments` MODIFY `comment_id` INT(5) NOT NULL; ALTER TABLE `book_comments` DROP PRIMARY KEY ;

  1. Agregue AUTO_INCREMENT con la propiedad UNIQUE_KEY .

ALTER TABLE ''brand_keywords'' CHANGE COLUMN ''comment_id'' ''comment_id'' INT(5) NOT NULL AUTO_INCREMENT UNIQUE;