http://docs.oracle.com/cd/E17952_01/refman-5.5-en/example-auto-increment.html
3.6.9. Utilizzando AUTO_INCREMENT
L'attributo AUTO_INCREMENT può essere utilizzato per generare un'identità unica per nuove righe:
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO animals (name) VALUES
('dog'),('cat'),('penguin'),
('lax'),('whale'),('ostrich');
SELECT * FROM animals;
Which returns:
+----+---------+
| id | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
+----+---------+
Nessun valore è stato specificato per la colonna AUTO_INCREMENT, quindi MySQL assegnato automaticamente numeri di sequenza. È inoltre possibile assegnare in modo esplicito NULL o 0 alla colonna per generare numeri di sequenza.
È possibile recuperare il valore AUTO_INCREMENT più recente con la funzione SQL LAST_INSERT_ID() o la funzione API C mysql_insert_id(). Queste funzioni sono specifiche della connessione, quindi i loro valori di ritorno non sono influenzati da un'altra connessione che sta anche eseguendo inserimenti.
Utilizzare il tipo di dati intero più piccolo per la colonna AUTO_INCREMENT di dimensioni sufficienti a contenere il valore di sequenza massimo necessario. Quando la colonna raggiunge il limite superiore del tipo di dati, il tentativo successivo di generare un numero di sequenza fallisce. Utilizzare l'attributo UNSIGNED se possibile per consentire un intervallo maggiore. Ad esempio, se si utilizza TINYINT, il numero di sequenza massimo consentito è 127. Per TINYINT UNSIGNED, il massimo è 255. Vedere Sezione 11.2.1, "Tipi interi (valore esatto) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT "Per gli intervalli di tutti i tipi interi.
Nota Per un inserimento di più righe, LAST_INSERT_ID() e mysql_insert_id() restituiscono effettivamente la chiave AUTO_INCREMENT dalla prima delle righe inserite. Ciò consente di riprodurre correttamente inserimenti su più righe su altri server in una configurazione di replica.
Se la colonna AUTO_INCREMENT è parte di più indici, MySQL genera valori di sequenza utilizzando l'indice che inizia con la colonna AUTO_INCREMENT, se ce n'è uno. Ad esempio, se la tabella degli animali contenesse gli indici PRIMARY KEY (grp, id) e INDEX (id), MySQL ignorerebbe il PRIMARY KEY per generare valori di sequenza. Di conseguenza, la tabella conterrà una singola sequenza, non una sequenza per valore di grp.
iniziare con un valore AUTO_INCREMENT diverso da 1, impostare tale valore con CREATE TABLE o ALTER TABLE, in questo modo:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100; Note InnoDB
Per le tabelle InnoDB, fare attenzione se si modifica la colonna contenente il valore di incremento automatico nel mezzo di una sequenza di istruzioni INSERT. Ad esempio, se si utilizza un'istruzione UPDATE per inserire un nuovo valore più grande nella colonna di incremento automatico, un INSERT successivo potrebbe riscontrare un errore "Duplicate entry". Il test se un valore di auto-incremento è già presente si verifica se si esegue una DELETE seguita da più istruzioni INSERT o quando si COMMIT la transazione, ma non dopo un'istruzione UPDATE.
MyISAM Note
Per le tabelle MyISAM, è possibile specificare AUTO_INCREMENT su una colonna secondaria in un indice a più colonne. In questo caso, il valore generato per la colonna AUTO_INCREMENT viene calcolato come MAX (auto_increment_column) + 1 prefisso WHERE = prefisso dato. Questo è utile quando vuoi mettere i dati in gruppi ordinati.
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
SELECT * FROM animals ORDER BY grp,id;
Which returns:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
In questo caso (quando la colonna AUTO_INCREMENT è parte di un indice a più colonne), valori AUTO_INCREMENT si riutilizzano se si elimina la riga con il più grande valore AUTO_INCREMENT in qualsiasi gruppo. Questo accade anche per le tabelle MyISAM, per le quali i valori AUTO_INCREMENT normalmente non vengono riutilizzati.
Ulteriori letture
Maggiori informazioni su AUTO_INCREMENT è disponibile qui:
Come assegnare l'attributo AUTO_INCREMENT per una colonna: Sezione 13.1.17, “CREATE TABLE sintassi”, e la Sezione 13.1.7, “ ALTER TABLE Sintassi ".
Come si comporta AUTO_INCREMENT in base alla modalità SQL NO_AUTO_VALUE_ON_ZERO: Sezione 5.1.7, "Modalità SQL del server".
Come utilizzare la funzione LAST_INSERT_ID() per trovare la riga che contiene il valore AUTO_INCREMENT più recente: Sezione 12.14, "Funzioni di informazione".
Impostazione del valore AUTO_INCREMENT da utilizzare: Sezione 5.1.4, "Variabili di sistema del server".
AUTO_INCREMENT e replica: Sezione 16.4.1.1, "Replica e AUTO_INCREMENT".
Variabili del sistema server relative a AUTO_INCREMENT (auto_increment_increment e auto_increment_offset) che è possibile utilizzare per la replica: Sezione 5.1.4, "Variabili di sistema del server".
http://search.oracle.com/search/search?q=auto_increment&group=Documentation&x=0&y=0
A tutti i costi? Veramente? –