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'');
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.