dal 2015 - visita n. 695
Generazione di sequenze
Generazione di sequenze

 

Generazione di sequenze

Una sequenza è un insieme di numeri interi 1, 2, 3, ... in ordine, generati su richiesta. Le sequenze sono spesso utilizzate nei database, perché molte applicazioni richiedono che ogni riga di una tabella contenga un valore unico e le sequenze forniscono un modo semplice per generarli. Questa sezione descrive come utilizzare le sequenze in MySQL.


Colonna AUTO_INCREMENT

Il modo più semplice per usare le sequenze è quello di definire una colonna con AUTO_INCREMENT e lasciare che per il resto se ne occupi MySQL.

Esempio

Viene creata una tabella e dopo si inseriranno alcune righe senza dare un record di ID record perché è autoincrementato da MySQL.

mysql> CREATE TABLE insect
    -> (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, # type of insect
    -> date DATE NOT NULL, # date collected
    -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO insect (id,name,date,origin) VALUES
    -> (NULL,'mosca','2015-02-19','cucina'),
    -> (NULL,'millepiedi','2015-02-19','viale'),
    -> (NULL,'cavalletta','2015-02-19','cortile');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id | name        | date       | origin     |
+----+-------------+------------+------------+
|  1 | mosca       | 2015-02-19 | cucina     |
|  2 | millepiedi  | 2015-02-19 | viale      |
|  3 | cavalletta  | 2015-02-19 | cortile    |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Ottenere i valori di AUTO_INCREMENT

LAST_INSERT_ID () è la funzione SQL, utilizzabile da qualsiasi client, che restituisce il valore incrementato dell'ultimo record. Altrimenti si può far ricorso alla corrispondente funzione PHP mysql_insert_id().

Esempio PHP

Dopo l'emissione di una query che genera un valore AUTO_INCREMENT, se ne recupera il valore chiamando mysql_insert_id ():

mysql_query ("INSERT INTO insect (name,date,origin)
VALUES('falena','2001-09-14','davanzale')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Rinumerare una sequenza esistente

Può capitare che vengano eliminati molti record da una tabella e si desidera rinumerare tutti i record. Questo può essere fatto utilizzando un semplice trucco, ma si devee stare molto attenti se la tabella si trova in JOIN con altra tabella.

Se la rinumerazione di una colonna con AUTO_INCREMENT è indispensabile occorre prima eliminare la colonna dalla tabella e poi aggiungerla di nuovo. L'esempio seguente mostra come rinumerare i valori id nella tabella insect utilizzando questa tecnica:

mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
    -> ADD PRIMARY KEY (id);

Avviare una sequenza da un valore prestabilito

Per impostazione predefinita, MySQL avvia una sequenza da 1, ma è possibile specificare un altro numero al momento della creazione della tabella. Di seguito è riportato un esempio in cui MySQL avvia la sequenza da 130.

mysql> CREATE TABLE insect
    -> (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 130,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, # type of insect
    -> date DATE NOT NULL, # date collected
    -> origin VARCHAR(30) NOT NULL # where collected
);

In alternativa, è possibile creare la tabella e quindi impostare il valore della sequenza iniziale con ALTER TABLE.

mysql> ALTER TABLE t AUTO_INCREMENT = 130;

















Introduzione
Installazione
Amministrazione
MySQL e PHP
Gestione database
Tipi di dati
Gestione tabelle
Query insert
Query select
Query update e delete
Clausola where
Clausola like e regexp
Clausola order by
Clausola join
Il valore NULL
Le transazioni
Il comando ALTER
Gli indici
Tabelle temporanee e cloni
Info sul database
Generazione di sequenze
Gestione dei duplicati
Iniezione di codice SQL
Export / Import



Per apprezzare la qualità di un vino e sapere in quale vendemmia viene fatto, non occorre berne tutto un barile.
Oscar Wilde

Valid CSS!
pagina generata in 0.001 secondi