Come posso resettare il AUTO_INCREMENT
campo di?
Voglio che inizi di 1
nuovo a contare .
TRUNCATE TABLE yourTableName;
Come posso resettare il AUTO_INCREMENT
campo di?
Voglio che inizi di 1
nuovo a contare .
TRUNCATE TABLE yourTableName;
Risposte:
È possibile ripristinare il contatore con:
ALTER TABLE tablename AUTO_INCREMENT = 1
Per InnoDB non è possibile impostare il auto_increment
valore più basso o uguale all'indice corrente più alto. (citazione da ViralPatel ):
Si noti che non è possibile reimpostare il contatore su un valore inferiore o uguale a quelli già utilizzati. Per MyISAM, se il valore è inferiore o uguale al valore massimo attualmente nella colonna AUTO_INCREMENT, il valore viene ripristinato al massimo corrente più uno. Per InnoDB, se il valore è inferiore al valore massimo corrente nella colonna, non si verifica alcun errore e il valore della sequenza corrente non viene modificato.
Vedi Come resettare un AutoIncrement MySQL usando un valore MAX da un'altra tabella? su come ottenere in modo dinamico un valore accettabile.
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;
Penso che questo lo farà
UPDATE
aggiornerai tutti i valori nella id
colonna.
Semplicemente così:
ALTER TABLE tablename AUTO_INCREMENT = value;
riferimento: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
significa impostarlo sul valore predefinito ... in modo da poter sostituire "valore" con 1
Esiste un modo molto semplice con phpmyadmin nella scheda "operazioni", è possibile impostare, nelle opzioni della tabella, l'incremento automatico del numero desiderato.
La migliore soluzione che ha funzionato per me:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
È veloce, funziona con innoDB e non ho bisogno di conoscere l'attuale valore massimo! In questo modo il contatore di incremento automatico si ripristinerà e si avvierà automaticamente dal valore massimo esistente.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, mentre ALTER TABLE tablename AUTO_INCREMENT = 1
non lo è .
Le risposte più votate a questa domanda raccomandano tutte "ALTER yourtable AUTO_INCREMENT = value". Tuttavia, questo funziona solo quando value
nella modifica è maggiore del valore massimo corrente della colonna di incremento automatico. Secondo la documentazione di MySQL 8 :
Non è possibile reimpostare il contatore su un valore inferiore o uguale al valore attualmente in uso. Per InnoDB e MyISAM, se il valore è inferiore o uguale al valore massimo attualmente nella colonna AUTO_INCREMENT, il valore viene reimpostato sul valore della colonna AUTO_INCREMENT corrente massimo più uno.
In sostanza, puoi solo modificare AUTO_INCREMENT per aumentare il valore della colonna di autoincremento, non reimpostarlo su 1, come l'OP pone nella seconda parte della domanda. Per le opzioni che consentono effettivamente di impostare AUTO_INCREMENT al di sotto del suo massimo corrente, dai un'occhiata a Riordina / ripristina chiave primaria di incremento automatico .
Aggiunta di un aggiornamento perché la funzionalità è cambiata in MySQL 5.6. A partire da MySQL 5.6 PUOI utilizzare la semplice ALTER TABLE con InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
I documenti vengono aggiornati per riflettere questo:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Il mio test mostra anche che la tabella NON viene copiata, il valore viene semplicemente modificato.
Ci sono buone opzioni fornite in Come ripristinare la colonna di incremento automatico di MySQL
Si noti che ALTER TABLE tablename AUTO_INCREMENT = value;
non non funziona per InnoDB
DELETE
(o ROLLBACK
) non recupererà gli ID. Un'eccezione: dopo un riavvio (o un arresto anomalo), viene calcolato l'id successivo MAX(id)+1
, recuperando in modo efficace gli ID eliminati alla fine . Eccezione all'eccezione: MySQL 8.0 lascia inutilizzati quegli ID.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
L'ho usato in alcuni dei miei script, il campo ID viene eliminato e quindi aggiunto di nuovo con le impostazioni precedenti, tutti i campi esistenti nella tabella del database vengono compilati con nuovi valori di incremento automatico, questo dovrebbe funzionare anche con InnoDB.
Si noti che tutti i campi all'interno della tabella verranno conteggiati e avranno altri ID !!!.
Puoi anche usare la TRUNCATE
tabella di sintassi in questo modo:
TRUNCATE TABLE table_name
ATTENZIONE !! TRUNCATE TABLE your_table
sarà eliminare tutto nella vostra your_table
!!
TRUNCATE
anche TUTTE le tue righe nella tabella specificata!
TRUNCATE
resetterà anche i auto_increment
campi? Il mio caso d'uso è quello di cancellare i vecchi dati nella tabella e ricominciare gli ID da 1 per i nuovi dati (immagina, cancellare la tabella per un uso corretto dopo che il test è completo). Ho pensato che avrei dovuto ricoprire DROP
l'intero tavolo CREATE
.
auto_increment
valore corrente , utilizzare DELETE FROM
invece di TRUNCATE
.
è per tabella vuota:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
se si dispone di dati ma si desidera riordinarli, si consiglia di utilizzare questo:
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`);
Ecco la mia soluzione, ma non consiglierò di farlo se la tua colonna ha vincoli o è collegata come chiave esterna ad altre tabelle in quanto avrebbe effetti negativi o non funzionerebbe.
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
Funziona bene!
A partire da MySQL 5.6 l'approccio seguente funziona più velocemente grazie al DDL online (nota algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Puoi semplicemente troncare la tabella per ripristinare la sequenza
TRUNCATE TABLE TABLE_NAME
Ho provato a modificare la tabella e impostare auto_increment su 1 ma non ha funzionato. Ho deciso di eliminare il nome della colonna che stavo incrementando, quindi creare una nuova colonna con il tuo nome preferito e impostare quella nuova colonna per incrementare dall'inizio.
Il contatore di incremento automatico per una tabella può essere (ri) impostato in due modi:
Eseguendo una query, come altri hanno già spiegato:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Utilizzo di Workbench o altri strumenti di progettazione di database visivi. Mostrerò su Workbench come è fatto, ma non dovrebbe essere molto diverso anche in altri strumenti. Facendo clic con il tasto destro sulla tabella desiderata e scegliendo Alter table
dal menu contestuale. Nella parte inferiore puoi vedere tutte le opzioni disponibili per modificare una tabella. Scegli Options
e otterrai questo modulo:
Quindi basta impostare il valore desiderato nel campo Auto increment
come mostrato nell'immagine. Questo eseguirà sostanzialmente la query mostrata nella prima opzione.
Per aggiornare l'ultimo più un ID
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
Ho cercato su Google e trovato questa domanda, ma la risposta che sto davvero cercando soddisfa due criteri:
Dal momento che non sono riuscito a trovare esattamente quello che voglio qui, ho raccolto la risposta da varie risposte e condividendola qui.
Poche cose da notare:
id
con tipo asint
chiave primariacreare una procedura memorizzata come questa:
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 ;
Quindi eseguirlo.
Prima dell'esecuzione, appare così quando si guarda sotto Stored Procedures nel database.
Quando corro, seleziono semplicemente la procedura memorizzata e premo Esegui selezione
Nota: la parte dei delimitatori è cruciale. Quindi, se copi e incolli dalle prime risposte selezionate in questa domanda, tendono a non funzionare per questo motivo.
Dopo l'esecuzione, dovrei vedere la procedura memorizzata
Se è necessario modificare la procedura memorizzata, è necessario eliminare la procedura memorizzata, quindi selezionare per eseguirla nuovamente.
Questa volta puoi semplicemente usare le normali query MySQL.
call reset_autoincrement('products');
Originariamente dalle mie note sulle query SQL in https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc e adattato per StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Prova a eseguire questa query
ALTER TABLE tablename AUTO_INCREMENT = value;
Oppure prova questa query per ripristinare l'incremento automatico
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
E imposta l'incremento automatico, quindi esegui questa query
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Ti suggerisco di accedere al Browser delle query e di eseguire le seguenti operazioni:
L'incremento automatico dovrebbe reimpostarsi su uno dopo aver inserito una nuova riga nella tabella.
Non so cosa accadrà se provi ad aggiungere una riga in cui esiste già un valore del campo auto_increment.
Spero che questo aiuto!
Il modo migliore è rimuovere il campo con AI e aggiungerlo di nuovo con AI, funziona per tutte le tabelle