francesco.chianese
pubblicato più di 2 anni fa

L’istruzione INSERT in MySQL

L'istruzione INSERT permette l'inserimento di un record in una tabella ecco una rapida guida

L’istruzione SQL INSERT aggiunge nuovi record in una tabella presente sul database MySQL. La sintassi è la seguente:

1INSERT INTO nome_tabella (lista colonne)
2VALUES (lista_valori);

Quindi se ad esempio vogliamo inserire un record all’interno della tabella persone la sintassi sarà la seguente.

1INSERT INTO persone (Nome,Cognome,Telefono)
2VALUES ('Mario','Rossi','0600000001');

In questo modo andremo ad inserire all’interno della tabella persone e precisamente nei campi Nome, Cognome, Telefono i valori che abbiamo indicato all’interno della clausola VALUES. Nel caso in cui la tabella abbia altri campi, oltre a quelli inseriti, che possono essere nulli, oppure hanno un valore di default assegnato, la tabella verrà aggiornata, altrimenti verrà restituito un messaggio di errore. Quindi ad esempio se la tabella persone oltre ai tre campi indicati nella clausola INSERT INTO, ha un campo “Indirizzo” che può anche non essere valorizzato, la tabella verrà aggiornata ed il campo Indirizzo sarà vuoto, altrimenti, se il campo Indirizzo è stato dichiarato NOT NULL verrà restituito un messaggio di errore.

L’istruzione INSERT prevede anche di omettere la lista colonne da aggiornare. In tal caso bisognerà riempire la lista_valori con tutti i campi della tabella da riempire, altrimenti verrà restituito un messaggio di errore.

Nell’esempio sopra abbiamo inserito dei nuovi valori in una tabella. Ciò non toglie che possono essere inseriti dei valori che sono presenti all’interno di altre tabelle. La sintassi è la seguente

1INSERT INTO nome_tabella (lista colonne)
2SELECT;

Ad esempio se vogliamo inserire all’interno della tabella persone dei dati della tabella impiegato, la sintassi sarà dunque la seguente:

1INSERT INTO persone (Nome,Cognome,Telefono)
2SELECT Nome,Cognome,Telefono
3FROM impiegato
4WHERE Cognome = 'Verde';

In questo modo verranno inserite all’interno della tabella persone tutte le righe della tabella impiegato con Cognome pari a ‘Verde’. La clausola SET consente di associare ad ogni colonna di una tabella il valore corrispondente. Ad esempio:

1INSERT INTO persone
2SET Nome = 'Mario', Cognome = 'Rossi', Telefono = '0600000001';

Osserviamo che quest’ istruzione SQL è del tutto identica a quella usata all’inizio nel primo esempio (la tabella persone viene aggiornata alla stessa maniera) con la differenza che all’inizio abbiamo usato la clausola VALUES, nel secondo caso la clausola SET. La differenza tra le due è che con VALUES possiamo inserire più record contemporaneamente in tabella, cosa che non è concessa con la clausola SET. Dunque l’istruzione

1INSERT INTO persone (Nome,Cognome,Telefono)
2VALUES ('Mario','Rossi','0600000001'), ('Mario','Bianchi','0200000001'), ('Paolo','Neri','0410000001');

inserirà tre nuovi record nella tabella persone.

Le tabelle di tipo MyISAM e Maria, quando devono inserire molti valori all’interno di uno o più indici, usano un algoritmo che permette di farlo abbastanza rapidamente. Di conseguenza, se si devono inserire molti valori in tabelle di questi tipi, è possibile disabilitare gli indici e riabilitarli dopo l’avvenuto inserimento.

1ALTER TABLE persone DISABLE KEYS;
2INSERT INTO persone ... ; -- molte righe
3ALTER TABLE persone ENABLE KEYS;

Infine c’è da dire che se il record da inserire esiste già in tabella, oppure nei valori da inserire è presente una chiave primaria già presente in tabella, verrà segnalato un messaggio di errore 1062. Per evitare di ricevere questo tipo di messaggio, si può utilizzare la parola chiave IGNORE:

1INSERT IGNORE INTO persone (nome, cognome) VALUES ('Mario', 'Rossi');

A volte l’applicazione non ha bisogno di aspettare che una INSERT venga completata. In questo caso si può utilizzare la parola chiave DELAYED; il server metterà l’istruzione in coda, invierà un messaggio di OK (se la sintassi è corretta) e il client potrà riprendere a lavorare immediatamente. L’unica controindicazione è che non si riceveranno eventuali messaggi di errore (righe duplicate, valori non ammessi, etc). INSERT DELAYED funziona solo sulle tabelle di tipo MyISAM, Maria, MEMORY, ARCHIVE e BLACKHOLE.

1INSERT DELAYED INTO persone (nome, cognome) VALUES ('Mario', 'Rossi');
Altre istruzioni fondamentali: Istruzione UPDATE Istruzione DELETE

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic