Tengo una tabla que contiene una identificación de clave primaria con incremento automático. Si elimino la última fila (la identificación más alta, para la identificación de examen = 6) e inserto una nueva fila, la nueva identificación comienza en 7. ¿Qué parámetro tengo que cambiar para que la clave primaria comience en 6?
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM;
INSERT INTO animals (name) VALUES
('dog'),('cat'),('penguin'),
('lax'),('whale'),('ostrich');
Resultado:
nombre de identificación
1 perro
2 gato
3 pingüino
4 lax
5 ballena
6 avestruz
DELETE FROM animals WHERE id = 6;
INSERT INTO animals (name) VALUES
('x');
Resultado:
nombre de identificación
1 perro
2 gato
3 pingüino
4 lax
5 ballena
7 x
Gracias por el consejo.
mysql
primary-key
mariadb
auto-increment
giordano
fuente
fuente
Respuestas:
Esto es por diseño: todos los DBMS actúan con columnas de incremento automático.
Si no lo hicieran, la integridad referencial externa podría dañarse. Para un ejemplo simple de esto, imagine que está almacenando URL para un servicio de acortamiento utilizando una columna de incremento automático como clave. No sabe si la URL abreviada ya se ha entregado a alguien, y la base de datos ciertamente no lo hace, por lo que reutilizar la ID 1234 podría hacer que la pobre abuela visite somenastypornsite.xxx en lugar de loverlyknitting.org cuando hace clic en http: / /shortthi.ng/1234 en un correo electrónico antiguo, en lugar de recibir el mensaje "lo siento pero este enlace ya no existe en nuestros registros".
Además, si restablece el incremento después de eliminar el último elemento, ¿también pasará por todo el trabajo (o esperará que la base de datos) renumere todo después del quinto elemento de 5 millones cuando se elimine el quinto elemento? completa con cambios en otras tablas donde sus restricciones de clave externa apuntan a la columna de incremento? Tal trabajo extra podría ser muy costoso en cuanto a IO.
Si haces restablecer el punto mínimo de la subasta después de eliminar el último elemento, no ser muy, muy cuidadoso de sus niveles de aislamiento de transacción: Es posible restablecerlo al igual que otra transacción hace uso del valor, lo que conduce a errores (o peor, fallos silenciosos), a menos te aseguras de que tu acción esté completamente aislada al 100%.
En general, recomiendo a las personas que trabajan con bases de datos que lean "Antipatterns SQL", que tiene un capítulo sobre este tema llamado "Psuedo-Key Neat Freaks" (que cubre el asunto de una manera más amigable de lo que el título del capítulo puede implicar para algunos). Esencialmente, si el valor tiene un significado más allá de ser una clave (o como máximo llevar información de orden de inserción), entonces probablemente no debería ser una columna de incremento automático, y si no tiene ningún significado más allá de ser una clave (o como máximo llevar orden de inserción) información), entonces las brechas no deberían importar.
fuente
Puede restablecer el valor de auto_increment utilizando lo siguiente:
Debería determinar el valor máximo presente en la tabla y agregar 1 a ese valor para usar en la declaración anterior.
fuente