MySQLi - Utilizzo delle sequenze

Una sequenza è un insieme di numeri interi 1, 2, 3, ... che vengono generati in ordine su richiesta. Le sequenze vengono spesso utilizzate nei database perché molte applicazioni richiedono che ogni riga di una tabella contenga un valore univoco e le sequenze forniscono un modo semplice per generarle. Questo capitolo descrive come usare le sequenze in MySQLi.

Utilizzo della colonna AUTO_INCREMENT

Il modo più semplice in MySQLi per usare le sequenze è definire una colonna come AUTO_INCREMENT e lasciare che MySQLi si occupi del resto delle cose.

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 MySQLi.

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

Ottieni valori AUTO_INCREMENT

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

Utilizza l'attributo mysql_insertid per ottenere il valore AUTO_INCREMENT 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 lo fa riferimento tramite l'handle del database:

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

Esempio PHP

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

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

Rinumerare una sequenza esistente

Potrebbe esserci un caso in cui sono stati eliminati molti record da una tabella e si desidera rieseguire 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 ad un altro tavolo.

Se si determina che la ripetizione della sequenza 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 i valori id nella tabella degli insetti utilizzando questa tecnica:

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

Avvio di una sequenza a un valore particolare

Per impostazione predefinita, MySQLi inizierà la sequenza da 1 ma è possibile specificare anche qualsiasi altro numero al momento della creazione della tabella. Di seguito è riportato l'esempio in cui MySQLi inizierà la sequenza da 100.

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

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

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;