Una volta creata la struttura del nostro database, ci ritroveremo, ovviamente, con una serie di tabelle vuote. La prima cosa da fare, quindi, sarà quella di inserire dei dati all’interno di queste tabelle. MySQL ci mette a disposizione diverse possibilità per raggiungere questo obiettivo, che illustreremo in dettaglio in questa lezione.
INSERT
Il costrutto tipico per il caricamento di nuovi dati all’interno di una tabella MySQL è certamente INSERT. Questa sintassi prevede alcune modalità di utilizzo, vediamole separatamente mediante l’ausilio di alcuni esempi pratici:
INSERT INTO … VALUES
Questa è la sintassi tipica per il caricamento di nuovi dati all’interno di una tabella MySQL. Essa prevede, oltre all’indicazione del nome della tabella, l’indicazione facoltativa dei campi in cui inserire i dati e, successivamente, l’indicazione dei dati da inserire in tali campi. Immaginiamo di dover popolare una tabella chiamata amici
, così strutturata:
CREATE TABLE amici (
id INT(20) AUTO_INCREMENT,
nome VARCHAR(20),
cognome VARCHAR(20),
telefono VARCHAR(15),
PRIMARY KEY(id)
);
Di seguito, la query per l’inserimento dei dati:
INSERT INTO amici (nome,cognome,telefono) VALUES ('Mario','Rossi','02.123456');
Mediante questa sintassi, andremo a inserire una nuova riga all’interno della nostra tabella amici
con i valori Mario per il campo nome e Rossi per il campo cognome.
Questa nuova riga assumerà, inoltre, il valore 1 per il campo id
(assegnato automaticamente), mentre non verrà valorizzato il campo telefono.
La sintassi INSERT INTO
, come detto, consente di omettere l’indicazione dei campi che si desidera riempire. In tal caso, sarà necessario prevedere un valore per ciascuno dei campi presenti nella tabella, rispettandone l’ordine.
INSERT INTO amici VALUES ('','Mario','Rossi','123456789');
In questo caso, abbiamo passato un valore vuoto per il campo id
in quanto, essendo auto-incrementale, si popola da solo con il giusto valore numerico.
INSERT INTO … SET
Una sintassi meno conosciuta ma utile è quella che prevede di utilizzare il comando INSERT INTO
in combinazione con la clausola SET
. Così facendo:
INSERT INTO amici SET nome = 'Mario', cognome = 'Rossi';
Da un punto di vista funzionale, non vi è alcuna differenza con l’istruzione basata su INSERT INTO … VALUES.
INSERT INTO … SELECT
Un modo particolare di popolare le tabelle prevede di utilizzare il comando INSERT INTO
in combinazione con il comando SELECT
: in questo modo, una tabella viene popolata inserendo dati estratti da una seconda tabella. Vediamo un esempio:
INSERT INTO amici (nome, cognome)
SELECT nome, cognome FROM parenti;
Nell’esempio qui sopra, abbiamo immaginato di popolare la tabella amici
con i dati già presenti in un’ipotetica tabella parenti
.
INSERT IGNORE INTO …
Il comando INSERT
può essere modificato nel suo comportamento di default mediante l’inserimento della keyword IGNORE. Aggiungendo questa parola dopo il comando INSERT, si invita il DBMS a non visualizzare errori nel caso in cui si cerchi di inserire un valore duplicato per un campo PRIMARY KEY
o UNIQUE
. Qualora ciò accada, semplicemente, MySQL ignorerà il comando.
INSERT IGNORE INTO amici
VALUES (1,'Mario','Rossi','123456789');
INSERT … ON DUPLICATE KEY
La clausola ON DUPLICATE KEY viene utilizzata per gestire situazioni simili a quelle descritte in precedenza. Mediante questa sintassi, si richiede al DBMS di effettuare una specifica operazione nel caso in cui, durante un INSERT
, si stia tentando di caricare dati duplicati per chiavi primarie o uniche. Vediamo un esempio di istruzione SQL:
INSERT INTO amici VALUES (1,'Luca','Verdi','987654321')
ON DUPLICATE KEY
UPDATE nome = 'Luca', cognome = 'Verdi', telefono = '987654321';
In pratica, qualora la chiave primaria sia già occupata, invece di procedere con un INSERT
, MySQL effettuerà un UPDATE
dei dati.
REPLACE
Il comando REPLACE in MySQL è un’estensione dello standard SQL. Utilizzando REPLACE
al posto di INSERT
, MySQL procederà a sostituire i dati qualora siano già presenti nel database; se non sono presenti, verrà effettuata una normale operazione di inserimento.
REPLACE INTO amici VALUES ('1','Mario','Rossi','123456789');
Come si può vedere, la sintassi è identica a quella di INSERT
.
Dal punto di vista tecnico, è rilevante sottolineare che REPLACE
non esegue un UPDATE
del record, ma piuttosto cancella il record precedente e inserisce un nuovo record. Per questa ragione, questa query restituirà Affected rows: 2.
LOAD DATA … INTO
Il comando LOAD DATA consente di caricare, in modo molto veloce, grandi volumi di dati all’interno di una tabella MySQL, prelevandoli da un file di testo (normalmente un file .CSV
).
Supponiamo quindi di avere un file amici.csv
contenente i dati da importare all’interno dell’omonima tabella su MySQL:
LOAD DATA INFILE 'c:/amici.csv'
INTO TABLE amici
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
Come si può notare, all’interno del nostro comando abbiamo specificato:
- il percorso fisico del file
.CSV
da utilizzare come sorgente; - il nome della tabella in cui importare i dati (dopo
INTO TABLE
); - che i campi, all’interno del file sorgente, sono separati da una virgola;
- che ogni valore è racchiuso tra virgolette;
- che ogni record termina con un ritorno a capo (
\n
); - che la prima linea del file è da ignorare (ad esempio perché contiene i nomi dei campi).
CREATE TABLE … SELECT
Per concludere questa lezione, accenniamo infine alla possibilità di creare delle tabelle già popolate di dati. Ciò è possibile mediante l’uso congiunto dei comandi CREATE TABLE e SELECT. Con CREATE TABLE
si crea la tabella, mentre con SELECT
si caricano al suo interno i dati prelevati da una seconda tabella. Il suo funzionamento è analogo a quello di INSERT INTO … SELECT.
Vediamo la sintassi:
CREATE TABLE amici (
id INT(20) AUTO_INCREMENT,
nome VARCHAR(20),
cognome VARCHAR(20),
telefono VARCHAR(15),
PRIMARY KEY(id)
) SELECT nome, cognome, telefono FROM parenti;