MySQL Auto_increment va 2 per 2


8

L'altro giorno ho installato MySQL Workbench, ho effettuato l'accesso al database della mia azienda e mi sono creato un tavolo su cui lavorare. Fin qui tutto bene. Il problema è che ho notato che il mio auto_increment aumenta di 2 di 2. Ad esempio:

ID    NAME
1     Paul
3     Jack
5     Louis
7     John
...

Quando lo faccio SHOW VARIABLES LIKE 'auto_inc%'ottengo questo:

'auto_increment_increment', '2'
'auto_increment_offset', '1'

Quindi ho provato a impostare auto_increment_increment1 con:

SET @@auto_increment_increment=1

E dopo aver verificato nuovamente con SHOW VARIABLES LIKE 'auto_inc%'ho confermato che "ha funzionato" con il risultato:

'auto_increment_increment', '1'
'auto_increment_offset', '1'

Ma i miei ID sono ancora incrementati in 2 per 2 .

La prima volta che l'ho fatto, ha funzionato bene e poi ho chiuso MySQL Workbench per rendermi conto che quando l'ho aperto di nuovo, è auto_increment_incrementstato impostato di nuovo su 2 . Ora sto provando a farlo di nuovo, ma non sembra nemmeno funzionare più.

Qualcuno può aiutarmi con questo, per favore?

Grazie ragazzi.


2
Starei attento a cambiare questo valore senza capire appieno perché l'ambiente della nostra azienda lo imposta. È una variabile comune da modificare durante l'esecuzione in una configurazione di replica multi-master, ad esempio. Inoltre, possiamo ottenere un'istruzione SHOW CREATE TABLE per la tabella con cui stai testando (anche test sulla produzione è una cattiva idea, tra l'altro)
Derek Downey,

Questo merita di essere una risposta, penso. O da aggiungere in uno esistente, qualunque cosa tu preferisca. L'azione migliore è un'azione cauta - o nessuna azione - per i DBA che vogliono mantenere il proprio lavoro.
ypercubeᵀᴹ

Risposte:


7

Il prefisso che è stato utilizzato:

SET @@auto_increment_increment=1;

Equivale a:

SET @@SESSION.auto_increment_increment=1;

Quando si modifica questa impostazione, diventa rilevante solo nella sessione corrente.

Per effettuare una correzione più permanente, prova:

SET GLOBAL auto_increment_increment=1;

Equivale a:

SET @@GLOBAL.auto_increment_increment=1;

Eh, pensavo che @@ fosse l'attributo della sessione. Dal manuale mysql: "Per indicare esplicitamente che una variabile è una variabile di sessione, precedere il suo nome da SESSION, @@ session. O @@" dev.mysql.com/doc/refman/5.1/en/set-option. html
Derek Downey,

Hmm .. così è. Ripristino della mia prima risposta.
Morgan Tocker,

Ehi Morgan, grazie per la risposta! E se non volessi o non potessi fare un SET GLOBAL? Posso impostarlo solo per il mio db / table molto specifico senza dover usare le variabili di sessione?
Bernardo Oliveira,

Se non riesci a SET GLOBAL, ogni sessione che non desideri che questo comportamento esegua SET auto_increment_increment = 1;
Morgan Tocker

2

Entrambe le variabili hanno valori globali e di sessione. Quindi è molto probabile che tu abbia cambiato il valore della sessione che era scomparso quando hai chiuso MySQL Workbench.

Un altro avvertimento a cui prestare attenzione è quello

queste variabili controllano il comportamento di tutte le colonne AUTO_INCREMENT in tutte le tabelle sul server MySQL. Se viene impostato il valore globale di una delle variabili, i suoi effetti persistono fino a quando il valore globale non viene modificato o ignorato impostando il valore della sessione o fino al riavvio di mysqld. Se viene impostato il valore locale, il nuovo valore influisce sulle colonne AUTO_INCREMENT per tutte le tabelle in cui le nuove righe vengono inserite dall'utente corrente per la durata della sessione, a meno che i valori non vengano modificati durante quella sessione.

Ciò che potrebbe anche ingannarti è il modo in cui viene calcolato il valore di incremento automatico successivo quando si modifica la dimensione dell'incremento. Non utilizza l'ultimo valore della colonna memorizzato, ma sta calcolando il valore più alto successivo utilizzando la formula

auto_increment_offset + N × auto_increment_increment

mentre N è un numero intero, quindi il nuovo valore è maggiore di quello esistente più grande.

Consulta la documentazione di auto_increment_increment su come funziona in dettaglio.


Sono informazioni molto utili. Grazie MicSim! In effetti stavo cambiando solo il valore della sessione. Prova di capire come cambiarlo permanentemente ma solo per un db o una tabella. Qualche idea?
Bernardo Oliveira,

Come dice la documentazione, non è possibile impostare db o tabella. Mi dispiace, non posso aiutarti qui. Forse stai cercando di ottenere qualcosa con la funzione di incremento automatico per cui non è stato progettato.
MicSim,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.