Utilizzo delle sequenze MySQL

Una sequenza è un insieme di numeri interi 1, 2, 3, ... che vengono generati in ordine su una specifica richiesta. Le sequenze sono usate frequentemente nei database perché molte applicazioni richiedono che ogni riga in una tabella contenga un valore univoco e le sequenze forniscono un modo semplice per generarle.

Questo capitolo descrive come usare le sequenze in MySQL.

Utilizzo della colonna AUTO_INCREMENT

Il modo più semplice in MySQL per utilizzare le sequenze è definire una colonna come AUTO_INCREMENT e lascia che le cose rimanenti si occupino di MySQL.

Esempio

Prova il seguente esempio. Questo creerà una tabella e successivamente inserirà alcune righe in questa tabella in cui non è necessario fornire l'ID del record perché viene incrementato automaticamente 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,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
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 |  housefly   | 2001-09-10 |   kitchen  |
|  2 |  millipede  | 2001-09-10 |  driveway  |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Ottieni valori AUTO_INCREMENT

Il LAST_INSERT_ID( )è una funzione SQL, quindi puoi usarla da qualsiasi client che capisca come emettere istruzioni SQL. Altrimenti, gli script PERL e PHP forniscono funzioni esclusive per recuperare il valore incrementato automaticamente dell'ultimo record.

Esempio PERL

Utilizzare il mysql_insertid attributo per ottenere il AUTO_INCREMENTvalore generato da una query. Questo attributo è accessibile tramite un handle di database o un handle di istruzione, a seconda di come si invia la query.

L'esempio seguente fa riferimento a esso tramite l'handle del database.

$dbh->do ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

Esempio PHP

Dopo aver emesso una query che genera un valore AUTO_INCREMENT, recuperare il valore chiamando il mysql_insert_id( ) comando.

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

Rinumerare una sequenza esistente

Potrebbe verificarsi un caso in cui sono stati eliminati molti record da una tabella e si desidera ripetere la sequenza di tutti i record. Questo può essere fatto usando un semplice trucco, ma dovresti stare molto attento a farlo se il tuo tavolo si unisce con l'altro tavolo.

Se si determina che il risequenziamento di una colonna AUTO_INCREMENT è inevitabile, il modo per farlo è eliminare la colonna dalla tabella, quindi aggiungerla di nuovo.

L'esempio seguente mostra come rinumerare il file id values nella tabella 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);

Avvio di una sequenza a un valore particolare

Per impostazione predefinita, MySQL inizierà la sequenza da 1, ma puoi specificare anche qualsiasi altro numero al momento della creazione della tabella.

Il seguente programma è un esempio che mostra come MySQL inizierà la sequenza da 100.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> 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, puoi creare la tabella e quindi impostare il valore della sequenza iniziale con ALTER TABLE comando.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;