Introduzione all'istruzione INSERT

Gli argomenti di questa pagina

  • Le sintassi per l'istruzione INSERT
  • Uso della Query INSERT ... VALUES
  • INSERT a riga singola
  • INSERT multirighe
  • Script per eseguire una Query di inserimento

Se per l'istruzione SELECT, il codice e gli esempi mostrati sono quasi tutti eseguiti dal vivo, per l'istruzione INSERT il codice e gli esempi sono generalmente copia - incollati solo dopo aver eseguito in locale i vari test.
Questo per evitare di gonfiare inutilmente le tabelle del DB del sito.

L'istruzione INSERT inserisce nuove righe in una tabella esistente.
L'istruzione INSERT inserisce nuove righe in una tabella esistente.
Le forme INSERT ... VALUES e INSERT ... SET della istruzione INSERT inseriscono righe basate su valori esplicitamente specificati.

Le sintassi per l'istruzione INSERT

-- inserimento con la forma INSERT SET
INSERT INTO table_name SET a=1, b=2, c=3
-- ===========================================
-- inserimento dati a riga singola
INSERT INTO table_name (a, b, c) VALUES (1,2,3)
INSERT INTO table_name (c, b, a) VALUES (3,2,1)
INSERT INTO table_name VALUES (1,2,3)
-- ===========================================
-- inserimento dati multirighe indicando i nomi di colonna
INSERT INTO table_name (a, b, c) 
    VALUES (1, 2, 3),
    VALUES (4, 5, 6),
    VALUES (7, 8, 9)
-- inserimento dati multirighe senza indicare i nomi di colonna
INSERT INTO table_name 
    VALUES (1, 2, 3),
    VALUES (4, 5, 6),
    VALUES (7, 8, 9)
-- ===========================================
-- inserimento dati multirighe con SELECT
INSERT INTO table_name (col1, col2, col3)
    SELECT col1, col2, col3 FROM table;
INSERT INTO table_name (col1, col2, col3)
    SELECT * FROM table;
INSERT INTO table_name 
    SELECT * FROM table;

Come si vede dalle sintassi mostrate qui sopra, si possono fare alcune considerazioni.

  • E' sempre possibile usare la coppia di argomenti SET nome_campo = valore.
  • Per le forme (elenco campi) VALUES (elenco valori) la disposizione dei campi e dei valori può essere arbitrario ma il numero ed il tipo dei due elenchi debbono essere corrispondenti
  • E' possibile omettere i nomi dei campi ed indicare i soli valori ma i valori debbono essere nel numero, nell'ordine e nel tipo dei campi della tabella, compreso l'eventuale campo ID.
  • Per gli inserimenti multirighe viene omesso il metodo SET colonna= valore ma viene usato il metodo (elenco campi) VALUES (elenco valori) o il solo (elenco valori) rispettando i criteri appena visti.
  • I valori possono essere prelevati, oltre dai vari input classici del PHP (form, files esterni, ecc), anche da altre tabelle del nostro DB e, se nel proprio spazio si dispone di più DB, da tabelle di altri DB tramite Query SELECT.

Uso della Query INSERT ... VALUES

In questo settore userò senz'altro la forma INSERT ... VALUES piuttosto che l'altra forma INSERT ... SET perchè mi sembra più flessibile. Ma si sappia che è ammesssa anche la forma INSERT...SET.

L'istruzione INSERT consente di aggiungere una o più righe ad una tabella. E' possibile dividere l'istruzione in due parti:

  • La prima parte indica la tabella di destinazione e, opzionalmente, le colonne di destinazione dove è possibile inserire i dati
  • La seconda parte indica i valori da memorizzare o nella clausola VALUES o, come si vedrà più avanti, in una SUB-QUERY SELECT

Per inserire i dati è possibile usare due possibili forme:

  • Inserimento a riga singola
  • inserimento multirighe

Per inserire una o più righe, nella prima parte dell'istruzione INSERT, è possibile:

  • specificare tutte le colonne di destinazione
  • specificare solo alcune colonne
  • non specificare alcuna colonna

INSERT a riga singola

Tra le forme viste sopra, l'istruzione INSERT a riga singola è certamente la più usata.
Il suo utilizzo principale è quello abbinato ad un FORM per inserimento dati.
I valori da inserire nella tabella vengono prelevati al momento del proceso al form. Dopo averli validati, i dati vengono sistemati nella Query INSERT. Ma è possibile usare anche delle costanti stringhe e/o numeriche, come si vedrà in seguito in questo capitolo.

INSERT multirighe

L'istruzione INSERT multirighe permette di registrare nella tabella più righe in una unica istruzione. La forma multirighe, quando possibile, è preferibile a quella a riga singola perchè la cache impegnata nell'eseguire le istruzioni non ha bisogno di essere svuotata dopo ogni registrazione ma lo fa solo al compimento dell'azione.
Il suo utilizzo principale è quello di copiare parzialmente o integralmente i dati da una tabella in un'altra tabella, storicizzare i dati prelevati da una o più tabelle, ed altri lavori rivolti al DB. Ma è anche possibile usare la forma di INSERT multirighe facendolo in modo manuale o quasi come mostrato nelle sintassi visualizzate più sopra, come per esempio ricopiare i dati memorizzati in un file di testo.

Script per eseguire una Query di inserimento

Qui di seguito viene mostrato il piccolo script che serve per l'esecuzione delle Query di inserimento. Se con una Query SELECT una delle prerogative è quella di stampare a video quel che si legge da una tabella, con una Query INSERT non c'è alcuna necessità di mostrare quel che la Query compie nel DB. Al limite si può dare all'utente alcune informazioni come:

  • il numero di record interessato in caso di successo
    $rows_modified = mysql_affected_rows();
  • l'ultimo ID auto_increment creato con l'inserimento della riga
    $ultimo_id = mysql_insert_id();

Tuttavia, se è sempre possibile conoscere il numero di record interessato alla Query, è possibile conoscere il reale ultimo ID inserito solo con la Query INSERT a riga singola. Con la Query INSERT multirighe normalmente viene rilevato il primo degli ID inseriti.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            
$info_str mysql_info();
            
$rows_modified mysql_affected_rows();
            
$ultimo_id mysql_insert_id();
            echo 
$rows_modified " righe interessate<br />\n";
            echo 
$ultimo_id ": Ultimo ID inserito<br />\n";
        }
    }
}
mysql_close ($link);
?>

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum