¿Cómo puedo restablecer el AUTO_INCREMENT
de un campo?
Quiero que comience a contar de 1
nuevo.
TRUNCATE TABLE yourTableName;
¿Cómo puedo restablecer el AUTO_INCREMENT
de un campo?
Quiero que comience a contar de 1
nuevo.
TRUNCATE TABLE yourTableName;
Respuestas:
Puede restablecer el contador con:
ALTER TABLE tablename AUTO_INCREMENT = 1
Para InnoDB no puede establecer el auto_increment
valor más bajo 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 que el 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 cambia.
¿ Vea cómo restablecer un AutoIncrement de MySQL usando un valor MAX de otra tabla? sobre cómo obtener dinámicamente un valor aceptable.
circular reference
curcular reference
?
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á
UPDATE
actualizará todos los valores en la id
columna.
Simplemente así:
ALTER TABLE tablename AUTO_INCREMENT = value;
referencia: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
significa establecerlo en el valor predeterminado ... para que pueda reemplazar "valor" por 1
Hay una manera muy fácil con phpmyadmin en la pestaña "operaciones", puede establecer, en las opciones de la tabla, aumento automático al número que desee.
La mejor solución que funcionó para mí:
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.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, mientras ALTER TABLE tablename AUTO_INCREMENT = 1
que no .
Las respuestas mejor calificadas a esta pregunta recomiendan "ALTERAR yourtable AUTO_INCREMENT = value". Sin embargo, esto solo funciona cuando value
la alteración es mayor que el valor máximo actual de la columna de autoincremento. De acuerdo con la documentación de MySQL 8 :
No puede restablecer el contador a un valor menor o igual al valor que está actualmente en uso. Tanto para InnoDB como para MyISAM, si el valor es menor o igual al valor máximo actualmente en la columna AUTO_INCREMENT, el valor se restablece al valor máximo actual de la columna AUTO_INCREMENT más uno.
En esencia, solo puede alterar AUTO_INCREMENT para aumentar el valor de la columna de autoincremento, no restablecerlo a 1, como el OP pregunta en la segunda parte de la pregunta. Para ver las opciones que realmente le permiten establecer el AUTO_INCREMENT hacia abajo desde su máximo actual, eche un vistazo a Reordenar / restablecer la clave primaria de incremento automático .
Agregar una actualización porque la funcionalidad cambió en MySQL 5.6. A partir de MySQL 5.6, PUEDES usar la ALTER TABLE simple 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, simplemente se cambia el valor.
Hay buenas opciones en Cómo restablecer la columna de aumento automático de MySQL
Tenga en cuenta que ALTER TABLE tablename AUTO_INCREMENT = value;
no no funciona para InnoDB
DELETE
(o ROLLBACK
) no recuperará los identificadores. Una excepción: después de un reinicio (o bloqueo), se calcula que la siguiente identificación es MAX(id)+1
, recuperando así los identificadores eliminados al final . Excepción a la excepción: MySQL 8.0 deja esos identificadores sin usar.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Utilicé esto en algunos de mis scripts, el campo de identificación se descarta y luego se agrega nuevamente con la configuración anterior, todos los campos existentes dentro de 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 dentro de la tabla serán contados y tendrán otros identificadores.
También puede usar la TRUNCATE
tabla de sintaxis como esta:
TRUNCATE TABLE table_name
¡¡TENER CUIDADO!! TRUNCATE TABLE your_table
se elimine todo en tu your_table
!!
TRUNCATE
también eliminará TODAS sus filas en la tabla especificada.
TRUNCATE
restablecerá los auto_increment
campos también? Mi caso de uso es borrar los datos antiguos en la tabla e iniciar las ID desde 1 nuevamente para obtener datos nuevos (imagínese, borrando la tabla para un uso adecuado después de completar la prueba). Pensé que tendría DROP
toda la mesa y CREATE
otra vez.
auto_increment
valor actual , use en DELETE FROM
lugar de TRUNCATE
.
es para mesa vacía:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
si tiene datos pero desea ordenarlos, le 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`);
Aquí está mi solución, pero no aconsejaré hacerlo si su columna tiene restricciones o está conectada como clave externa a otras tablas, ya que tendría efectos negativos o incluso no funcionaría.
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
Esto funciona bien!
A partir de MySQL 5.6, el siguiente enfoque funciona más rápido debido a DDL en línea (nota algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Simplemente puede truncar la tabla para restablecer la secuencia
TRUNCATE TABLE TABLE_NAME
Intenté alterar la tabla y establecer auto_increment en 1 pero no funcionó. Decidí eliminar el nombre de la columna que estaba incrementando, luego creé una nueva columna con su nombre preferido y configuré esa nueva columna para que se incremente desde el inicio.
El contador de incremento automático para una tabla se puede (re) configurar de dos maneras:
Al ejecutar una consulta, como otros ya explicaron:
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 no debería ser muy diferente en otras herramientas también. Al hacer clic derecho sobre la tabla deseada y elegir Alter table
desde el menú contextual. En la parte inferior, puede ver todas las opciones disponibles para modificar una tabla. Elija Options
y obtendrá este formulario:
Luego, simplemente configure el valor deseado en el campo Auto increment
como se muestra en la imagen. Básicamente, esto ejecutará la consulta que se muestra en la primera opción.
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);
ALTER TABLE tablename AUTO_INCREMENT = 1
Busqué en Google y encontré esta pregunta, pero la respuesta que realmente estoy buscando cumple dos criterios:
Como no pude encontrar exactamente lo que quiero aquí, he improvisado la respuesta de varias respuestas y la he compartido aquí.
Pocas cosas a tener en cuenta:
id
con tipo como int
clave principalcrear 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 la ejecución, se ve así cuando mira en Procedimientos almacenados en su base de datos.
Cuando ejecuto, simplemente selecciono el procedimiento almacenado y presiono Ejecutar selección
Nota: la parte delimitadores es crucial. Por lo tanto, si copia y pega de las respuestas seleccionadas en esta pregunta, tienden a no funcionar por este motivo.
Después de correr, debería ver el procedimiento almacenado
Si necesita cambiar el procedimiento almacenado, debe eliminar el procedimiento almacenado, luego seleccione ejecutar nuevamente.
Esta vez simplemente puede usar consultas normales de MySQL.
call reset_autoincrement('products');
Originalmente de mis propias notas de consultas SQL en https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc y adaptado para StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Intenta ejecutar esta consulta
ALTER TABLE tablename AUTO_INCREMENT = value;
O pruebe esta consulta para restablecer el incremento automático
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
Y establecer el incremento automático y luego ejecutar esta consulta
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Le sugiero que vaya al navegador de consultas y haga lo siguiente:
Auto_increment debería restablecerse a uno una vez que ingrese una nueva fila en la tabla.
No sé qué sucederá si intentas agregar una fila donde ya existe un valor de campo auto_increment.
¡Espero que esto ayude!
La mejor manera es eliminar el campo con AI y agregarlo nuevamente con AI, funciona para todas las tablas