reiniciar - reset auto increment index mysql
¿Cómo reiniciar AUTO_INCREMENT en MySQL? (21)
ALTER TABLE nombre de tabla AUTO_INCREMENT = 1
¿Cómo puedo restablecer el AUTO_INCREMENT
de un campo? Quiero que empiece a contar desde 1
nuevo.
Agregando una actualización porque la funcionalidad cambió en MySQL 5.6. A partir de MySQL 5.6 se puede usar la simple ALTER TABLE con InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
Los documentos se actualizan para reflejar esto:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Mi prueba también muestra que la tabla NO se copia, el valor simplemente se cambia.
Aquí está mi solución, pero no recomendaré hacer esto si su columna tiene restricciones o está conectada como clave externa a otras tablas, ya que tendría efectos negativos o incluso no funcionarán.
> Primero: soltar la columna
ALTER TABLE tbl_name DROP COLUMN column_id
> Segundo: vuelva a crear la columna y configúrela como PRIMERA si la quiere como la primera columna que asumo.
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
¡Esto funciona bien!
Busqué en Google y encontré esta pregunta, pero la respuesta que realmente busco cumple con dos criterios:
- utilizando puramente consultas de MySQL
- restablecer una tabla existente auto-incremento a max (id) + 1
Como no pude encontrar exactamente lo que quiero aquí, he improvisado la respuesta de varias respuestas y la he compartido aquí.
Algunas cosas a tener en cuenta:
- La tabla en cuestión es InnoDB.
- La tabla usa el
id
campo con el tipo comoint
como clave principal - La única forma de hacer esto únicamente en MySQL es usar el procedimiento almacenado.
- Mis imágenes a continuación están utilizando SequelPro como la GUI. Deberías poder adaptarlo en función de tu editor MySQL preferido.
- He probado esto en MySQL Ver 14.14 Distrib 5.5.61, para debian-linux-gnu
Paso 1: Crear procedimiento almacenado
crear un procedimiento almacenado como este:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT(''SELECT @next_inc := max(id) + 1 FROM '',tablename,'';'');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat(''ALTER TABLE '', tablename, '' AUTO_INCREMENT = '', @next_inc, '';'');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
Entonces ejecútalo.
Antes de ejecutarlo, se ve así cuando busca en Procedimientos almacenados en su base de datos.
Cuando corro, simplemente selecciono el procedimiento almacenado y presiono Ejecutar selección
Nota: los delimitadores son cruciales. Por lo tanto, si copia y pega desde la parte superior de las respuestas seleccionadas en esta pregunta, tienden a no funcionar por este motivo.
Después de ejecutar, debería ver el procedimiento almacenado
Si necesita cambiar el procedimiento almacenado, debe eliminar el procedimiento almacenado y luego seleccionar para ejecutar nuevamente.
Paso 2: llamar al procedimiento almacenado
Esta vez simplemente puedes usar las consultas normales de MySQL.
call reset_autoincrement(''products'');
Originalmente de mis propias consultas de SQL, notas en https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc y adaptadas para
El contador de incremento automático para una tabla se puede (re) configurar de dos maneras:
Al ejecutar una consulta, como ya explicaron otros:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Usando Workbench u otra herramienta de diseño de base de datos visual. Voy a mostrar en Workbench cómo se hace, pero tampoco debería ser muy diferente en otras herramientas. Al hacer clic con el botón derecho sobre la tabla deseada y elegir
Alter table
en el menú contextual. En la parte inferior puede ver todas las opciones disponibles para modificar una tabla. ElijaOptions
y obtendrá este formulario:Luego, simplemente configure el valor deseado en el campo
Auto increment
como se muestra en la imagen. Esto básicamente ejecutará la consulta mostrada en la primera opción.
Hay buenas opciones dadas en ViralPatel
Tenga en cuenta que ALTER TABLE tablename AUTO_INCREMENT = value;
no funciona para InnoDB
Hay una forma muy fácil con phpmyadmin en la pestaña "operaciones", puede configurar, en las opciones de la tabla, el aumento automático al número que desee.
Intenté alterar la tabla y establecer auto_increment en 1, pero no funcionó. Resolví eliminar el nombre de la columna que estaba incrementando, luego crear una nueva columna con su nombre preferido y configurar esa nueva columna para que se incremente desde el inicio.
La mejor manera es eliminar el campo con AI y agregarlo nuevamente con AI, funciona para todas las tablas
La mejor solución que me funcionó:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
Es rápido, funciona con innoDB, ¡y no necesito saber el valor máximo actual! De esta manera, el contador de incremento automático se reiniciará y se iniciará automáticamente a partir del valor máximo existente.
Las respuestas mejor calificadas a esta pregunta recomiendan "ALTER yourtable AUTO_INCREMENT = value". Sin embargo, esto solo funciona cuando el value
en la modificación es mayor que el valor máximo actual de la columna de autoincremento. Según la documentación de MySQL :
No puede restablecer el contador a un valor menor o igual a cualquiera que ya se haya utilizado. Para MyISAM, si el valor es menor o igual al valor máximo actualmente en la columna AUTO_INCREMENT, el valor se restablece al máximo actual más uno. Para InnoDB, puede usar ALTER TABLE ... AUTO_INCREMENT = value a partir de MySQL 5.0.3, pero si el valor es menor que el valor máximo actual en la columna, no se produce ningún error y el valor de secuencia actual no se cambia.
En esencia, solo puede modificar AUTO_INCREMENT para aumentar el valor de la columna de autoincremento, no restablecerlo a 1, como lo solicita el OP en la segunda parte de la pregunta. Para las opciones que realmente le permiten establecer AUTO_INCREMENT hacia abajo desde su máximo actual, consulte Reordenar / restablecer la clave principal de incremento automático .
Para actualizar la última más una identificación
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
Puede restablecer el contador con:
ALTER TABLE tablename AUTO_INCREMENT = 1
Para InnoDB no puede establecer el valor auto_increment
inferior o igual al índice actual más alto. (cita de ViralPatel ):
Tenga en cuenta que no puede restablecer el contador a un valor menor o igual a cualquiera que ya se haya utilizado. Para MyISAM, si el valor es menor o igual al valor máximo actualmente en la columna AUTO_INCREMENT, el valor se restablece al máximo actual más uno. Para InnoDB, si el valor es menor que el valor máximo actual en la columna, no se produce ningún error y el valor de secuencia actual no se cambia.
Consulte ¿Cómo restablecer un autoincremento de MySQL usando un valor MAX de otra tabla? sobre cómo obtener dinámicamente un valor aceptable.
Simplemente así:
ALTER TABLE tablename AUTO_INCREMENT = value;
referencia: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
Simplemente puede truncar la tabla para restablecer la secuencia
TRUNCATE TABLE TABLE_NAME
También puede utilizar la sintaxis de la tabla TRUNCATE
siguiente manera: TRUNCATE TABLE table_name
¡¡TENER CUIDADO!! TRUNCATE TABLE your_table
eliminará todo lo que hay en tu your_table
!
Te sugiero que vayas a Query Browser y hagas lo siguiente:
- Vaya a los esquemas y encuentre la tabla que desea modificar.
- Haga clic derecho y seleccione copiar crear declaración.
- Abra una pestaña de resultados y pegue la declaración de creación.
- Vaya a la última línea de la declaración de creación y busque el Auto_Increment = N, (donde N es un número actual para el campo auto_increment).
- Reemplace N con 1.
- Presione ctrl + enter .
Auto_increment debería restablecerse a uno una vez que ingrese una nueva fila en la tabla.
No sé qué sucederá si intenta agregar una fila donde ya existe un valor de campo auto_increment.
¡Espero que esto ayude!
es para mesa vacía:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
Si tienes datos pero quieres ordenarlos, te recomiendo usar esto:
ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Usé esto en algunos de mis scripts, el campo de identificación se elimina y luego se vuelve a agregar con la configuración anterior, todos los campos existentes en la tabla de la base de datos se completan con nuevos valores de incremento automático, esto también debería funcionar con InnoDB.
Tenga en cuenta que todos los campos de la tabla se volverán a contar y tendrán otros ID.
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Creo que esto lo hará.