Cambia il numero iniziale di incremento automatico?

In MySQL, ho una tabella e voglio impostare il valore auto_increment su 5 anziché su 1 . È ansible ciò e quale dichiarazione di interrogazione fa questo?

È ansible utilizzare ALTER TABLE per modificare il valore iniziale auto_increment:

 ALTER TABLE tbl AUTO_INCREMENT = 5; 

Vedi il riferimento MySQL per maggiori dettagli.

Sì, puoi usare ALTER TABLE t AUTO_INCREMENT = 42 statement. Tuttavia, devi essere consapevole che ciò causerà la ricostruzione dell’intero tavolo, almeno con InnoDB e alcune versioni di MySQL. Se si dispone di un set di dati già esistente con milioni di righe, potrebbe essere necessario molto tempo per il completamento .

Nella mia esperienza, è meglio fare quanto segue:

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

In questo modo, anche se si sta eseguendo il rollback della transazione, MySQL manterrà il valore di incremento automatico e la modifica verrà applicata immediatamente.

Puoi verificarlo emettendo una dichiarazione SHOW CREATE TABLE t . Tu dovresti vedere:

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

Come incrementare automaticamente di uno, a partire da 10 in 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' 

Questo auto incrementa la colonna id di uno a partire da 10.

Incremento automatico in MySQL di 5, a partire da 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' 

Questo auto incrementa la colonna id per 5 ogni volta, a partire da 10.

Procedura per correggere automaticamente il valore AUTO_INCREMENT della tabella

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

Se hai bisogno di questa procedura per nomi di campi variabili invece di id questo potrebbe essere utile:

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

Puoi anche farlo usando phpmyadmin. Basta selezionare la tabella piuttosto che andare alle azioni. E cambia l’incremento automatico sotto le opzioni della tabella. Non dimenticare di cliccare su start Incremento automatico in phpmyadmin

basta esportare la tabella con i dati .. quindi copiare il suo sql come

 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 ; 

ora cambia il valore di incremento automatico ed esegui sql.