2010-02-18 19 views
5

Sto usando un server MySQL 5.0. Il mio requisito è quello di aggiungere una riga speciale a una tabella esistente che abbia una chiave primaria con incremento automatico.Posso usare zero in una colonna che ha l'attributo AUTO_INCREMENT

Sarebbe molto utile per la manutenzione e la gestione del progetto in futuro se fossimo in grado di rendere l'ID di questa riga 0 (perché è facile da ricordare e facile da individuare nelle osservazioni manuali).

Ora, so che MySQL non ha alcun problema con l'utilizzo del proprio valore per una colonna autoincrement, e i miei test hanno dimostrato che posso impostare la chiave primaria di incremento automatico di una riga su 0 con una query UPDATE. Tuttavia, sono state espresse alcune preoccupazioni su come questo potrebbe influire sulla funzionalità di incremento automatico della colonna in futuri INSERT.

I miei esperimenti (limitati) non hanno mostrato nulla di strano e non riesco a trovare alcun avviso specifico nei documenti MySQL. Cioè, a parte questa (sottolineatura mia): http://dev.mysql.com/doc/refman/5.0/en/create-table.html

ci può essere solo una colonna AUTO_INCREMENT per tabella, deve essere indicizzato, e non può avere un valore predefinito. Una colonna AUTO_INCREMENT funziona correttamente solo se contiene solo valori positivi. L'inserimento di un numero negativo viene considerato come l'inserimento di un numero positivo molto grande. Questo viene fatto per evitare problemi di precisione quando i numeri “avvolgono” over da positivo a negativo e anche per garantire che non si accidentalmente ottiene una colonna AUTO_INCREMENT che contiene 0.

non riesco a trovare una spiegazione per cosa c'è di sbagliato nell'avere un valore pari a zero in una colonna AUTO_INCREMENT, quindi qualcuno può dirmi se avere una colonna AUTO_INCREMENT che contiene 0 è una cosa negativa?

risposta

2

Come già scoperto, non è possibile assegnare uno 0 a un campo di incremento automatico con INSERT, è necessario utilizzare un UPDATE. AFAIK non c'è niente di sbagliato nell'avere uno 0 di fila tranne quando si tenta di eseguire il dump e l'importazione. Ma ciò può essere evitato inserendo prima i dati e poi contrassegnandolo come un campo di incremento automatico.

+0

Buona chiamata su reimport. Non l'avevo considerato come non lo facciamo spesso, ma ne prenderemo nota nel caso in cui lo facciamo. Per quanto ne so, non c'è niente di sbagliato con 0 in una colonna di incremento automatico :). Ma quella nota che ho citato suggerisce il contrario, quindi speravo di ottenere una risposta che spiegasse perché il manuale di riferimento lo dice, o perché potrebbe essere sbagliato. Quanto sei sicuro che non ci sia nulla di sbagliato in 0 in una colonna di incremento automatico? –

+0

Sono abbastanza sicuro che starai bene. Questa volta ho avuto uno 0 in un campo di autoincremento a causa di un bug nel mio codice, non ha avuto effetti collaterali avversi. – e4c5

1

La memorizzazione di 0 non è una pratica consigliata. Ad esempio, se si esegue il dump della tabella con mysqldump e quindi la si ricarica, MySQL normalmente genera nuovi numeri di sequenza quando incontra i valori 0, risultando in una tabella con contenuti diversi da quello che è stato scaricato. Abilitare NO_AUTO_VALUE_ON_ZERO prima di ricaricare il file di dump risolve questo problema. mysqldump ora include automaticamente nella sua uscita una dichiarazione che abilita NO_AUTO_VALUE_ON_ZERO, per evitare questo problema.

Problemi correlati