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 ;
- Agregue
AUTO_INCREMENT
con la propiedadUNIQUE_KEY
.
ALTER TABLE ''brand_keywords'' CHANGE COLUMN ''comment_id'' ''comment_id'' INT(5) NOT NULL AUTO_INCREMENT UNIQUE;