update column change automatico auto_increment mysql

mysql - column - ¿Cambiar número inicial de incremento automático?



reset id mysql phpmyadmin (7)

En MySQL, tengo una tabla y quiero establecer el valor auto_increment en 5 lugar de 1 . ¿Es esto posible y qué declaración de consulta hace esto?


Cómo incrementar automáticamente en uno, comenzando en 10 en MySQL:

create table foobar( id INT PRIMARY KEY AUTO_INCREMENT, moobar VARCHAR(500) ); ALTER TABLE foobar AUTO_INCREMENT=10; INSERT INTO foobar(moobar) values ("abc"); INSERT INTO foobar(moobar) values ("def"); INSERT INTO foobar(moobar) values ("xyz"); select * from foobar; ''10'', ''abc'' ''11'', ''def'' ''12'', ''xyz''

Este auto incrementa la columna de identificación en uno, comenzando en 10.

Incremento automático en MySQL por 5, comenzando en 10:

drop table foobar create table foobar( id INT PRIMARY KEY AUTO_INCREMENT, moobar VARCHAR(500) ); SET @@auto_increment_increment=5; ALTER TABLE foobar AUTO_INCREMENT=10; INSERT INTO foobar(moobar) values ("abc"); INSERT INTO foobar(moobar) values ("def"); INSERT INTO foobar(moobar) values ("xyz"); select * from foobar; ''11'', ''abc'' ''16'', ''def'' ''21'', ''xyz''

Este auto incrementa la columna de identificación en 5 cada vez, comenzando en 10.


Procedimiento para corregir automáticamente el valor de AUTO_INCREMENT de la tabla

DROP PROCEDURE IF EXISTS update_auto_increment; DELIMITER // CREATE PROCEDURE update_auto_increment (_table VARCHAR(64)) BEGIN DECLARE _max_stmt VARCHAR(1024); DECLARE _stmt VARCHAR(1024); SET @inc := 0; SET @MAX_SQL := CONCAT(''SELECT IFNULL(MAX(`id`), 0) + 1 INTO @inc FROM '', _table); PREPARE _max_stmt FROM @MAX_SQL; EXECUTE _max_stmt; DEALLOCATE PREPARE _max_stmt; SET @SQL := CONCAT(''ALTER TABLE '', _table, '' AUTO_INCREMENT = '', @inc); PREPARE _stmt FROM @SQL; EXECUTE _stmt; DEALLOCATE PREPARE _stmt; END// DELIMITER ; CALL update_auto_increment(''your_table_name'')


Puede usar ALTER TABLE para cambiar el valor inicial de auto_increment:

ALTER TABLE tbl AUTO_INCREMENT = 5;

Vea la referencia de MySQL para más detalles.


Sí, puede utilizar la instrucción ALTER TABLE t AUTO_INCREMENT = 42 . Sin embargo, debe tener en cuenta que esto causará la reconstrucción de toda la tabla, al menos con InnoDB y ciertas versiones de MySQL. Si tiene un conjunto de datos ya existente con millones de filas, podría tardar mucho tiempo en completarse .

En mi experiencia, es mejor hacer lo siguiente:

BEGIN WORK; -- You may also need to add other mandatory columns and values INSERT INTO t (id) VALUES (42); ROLLBACK;

De esta manera, incluso si está restituyendo la transacción, MySQL mantendrá el valor de incremento automático y el cambio se aplicará instantáneamente.

Puede verificar esto emitiendo una instrucción SHOW CREATE TABLE t . Debería ver:

> SHOW CREATE TABLE t /G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( ... ) ENGINE=InnoDB AUTO_INCREMENT=43 ...


Si necesita este procedimiento para nombres de campo variables en lugar de id esto podría ser útil:

DROP PROCEDURE IF EXISTS update_auto_increment; DELIMITER // CREATE PROCEDURE update_auto_increment (_table VARCHAR(128), _fieldname VARCHAR(128)) BEGIN DECLARE _max_stmt VARCHAR(1024); DECLARE _stmt VARCHAR(1024); SET @inc := 0; SET @MAX_SQL := CONCAT(''SELECT IFNULL(MAX('',_fieldname,''), 0) + 1 INTO @inc FROM '', _table); PREPARE _max_stmt FROM @MAX_SQL; EXECUTE _max_stmt; DEALLOCATE PREPARE _max_stmt; SET @SQL := CONCAT(''ALTER TABLE '', _table, '' AUTO_INCREMENT = '', @inc); PREPARE _stmt FROM @SQL; EXECUTE _stmt; DEALLOCATE PREPARE _stmt; END // DELIMITER ; CALL update_auto_increment(''your_table_name'', ''autoincrement_fieldname'');


También puedes hacerlo usando phpmyadmin. Solo selecciona la tabla que ir a acciones. Y cambia el incremento automático debajo de las opciones de la tabla. No te olvides de hacer clic en Inicio


solo exporta la tabla con datos ... luego copia su sql como

CREATE TABLE IF NOT EXISTS `employees` ( `emp_badgenumber` int(20) NOT NULL AUTO_INCREMENT, `emp_fullname` varchar(100) NOT NULL, `emp_father_name` varchar(30) NOT NULL, `emp_mobile` varchar(20) DEFAULT NULL, `emp_cnic` varchar(20) DEFAULT NULL, `emp_gender` varchar(10) NOT NULL, `emp_is_deleted` tinyint(4) DEFAULT ''0'', `emp_registration_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `emp_overtime_allowed` tinyint(4) DEFAULT ''1'', PRIMARY KEY (`emp_badgenumber`), UNIQUE KEY `bagdenumber` (`emp_badgenumber`), KEY `emp_badgenumber` (`emp_badgenumber`), KEY `emp_badgenumber_2` (`emp_badgenumber`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=111121326 ;

ahora cambia el valor de incremento automático y ejecuta sql.