Per stampare: Clicca qui oppure seleziona File » Stampa nel menù del tuo browser.
-----------------------------------------------------------------------------------------------
Questo intervento è stato stampato da Guide di Dada.Net
raggiungibile a http://guide.dada.net
-----------------------------------------------------------------------------------------------
By Database di Andrea Silvestri
URL: http://guide.dada.net/database/interventi/2001/05/44196.shtml
Database di Andrea Silvestri guida dal 29-12-2000
Consideriamo alcuni esempi sulla insert, applicati alle tabelle utilizzate negli interventi sulla SELECT.
Negli interventi sull'istruzione select sono state utilizzate le tabelle: impiegati ,
sedi e
temperature ; vediamo in questo intervento come popolarle utilizzando l'istruzione INSERT.
Per inserire i tre record della impiegati sono necessarie tre istruzioni insert:
INSERT INTO impiegati
(matricola,nome,cognome,superiore,data_ass,salario,sede)
VALUES
('0001','MARIO','ROSSI',null,'12-12-1990',5000000,10);
Notate che i primi tre campi, creati nell'intervento sulla create table , sono tra apici, questo perche' sono stati definiti di tipo stringa, mentre gli ultimi due, numerici, non sono tra apici.
Vi ricordo che le stringhe sono case sensitive, ad esempio Mario e MARIO sono due stringhe differenti, quindi in fase di inserimento e' importante decidere come trattare le stringhe, onde evitare problemi in fase di estrazione dei dati.
L'impiegato in questione non ha un superiore e quindi e' stato inserito un valore nullo; attenzione a non inserirlo tra apici, altrimenti introdurreste una stringa e non un valore nullo. Avremmo anche potuto evitare di specificare il campo superiore:
INSERT INTO impiegati
(matricola,nome,cognome,data_ass,salario,sede)
VALUES
('0001','MARIO','ROSSI','12-12-1990',5000000,10);
Questo e' possibile in quanto il campo superiore e' definito come null e puo' quindi contenere valori nulli.
Quando si inseriscono dati e' importante rispettare la dimensione dei campi, ad esempio se la matricola fosse stata '01234', l'inserimento sarebbe fallito, in quanto il campo e' stato definito di lunghezza 4.
Inseriamo anche il secondo record:
INSERT INTO impiegati
VALUES
('0123','PAOLO','VERDI','0001','23-11-1993',3500000,10);
In questo caso, avendo specificato tutti i campi ho evitato di elencare le colonne.
Non avrei potuto inserire questo record, prima del precedente, perche' il suo campo superiore fa riferimento al valore matricola del primo record ('0001'), quindi in fase di inserimento ci si deve accertare che se si hanno delle foreign key , i valori che si vanno ad inserire siano presenti nella tabella referenziata. Lo stesso discorso vale quindi per il campo sede che punta alla primary key della tabella sedi e al terzo record, che solo ora puo' essere inserito:
INSERT INTO impiegati
(matricola,nome,cognome,superiore,data_ass,salario,sede)
VALUES
('0234','MARIO','BIANCHI','0123','26-02-1995',2100000,20);
Per ora ignoriamo il campo data, che merita un discorso particolare, in quanto non e' detto che scritta cosi' sia interpretata come una data valida, ad esempio potrebbe essere interpretata come il 2 del 26esimo mese del 1995, generando un errore di data non valida.
Supponiamo di voler inserire una serie di impiegati andandoli ad estrarre da una tabella impiagati2, che pero' contiene solo la matricola, nome, cognome e data di nascita.
INSERT INTO impiegati
AS
SELECT matricola,nome,cognome,null,datanascita,0,10)
FROM impiegati2;
In questo modo ho integrato i dati mancanti con uno 0 per lo stipendio, null e 10 per le foreign key. Non avrei potuto usare lo 0, in quanto non presente nelle tabelle referenziate dalla chiave e non avrei nemmeno potuto utilizzare il null per la sede, perche' e' un campo not null, definito nell'intervento sui constraint.
A questo punto, e' possibile andare a modificare ogni record inserito, specificando il superiore e la sede. In questo caso non si utilizza la insert, che inserisce un nuovo record, ma la update, di cui parlero' nel prossimo intervento.