Ritorna alla lezione

Laboratorio di Sistemi Informativi - Esercizi

SQL e MySQL: comandi di definizione dei dati

Esercizio 1

Il comando per creare la tabella aerei è il seguente:

create table aerei (
    id char(20) primary key,
    produttore char(20) not null,
    modello char(20) not null,
    dataimm date,
    numposti int
);

mentre i comandi di inserimento sono

insert into aerei values ('superjet','boeing','747','2000-10-10','350');
insert into aerei values ('minijet','MDD','Super80',NULL,NULL);

In alternativa, il secondo comando si può anche scrivere come

insert into aerei(id, produttore, modello) values ('minijet','MDD','Super80').

In questo caso per i campi dataimm e numposti verrà usato il valore di default che, in mancanza di specificazione, è proprio NULL.


Attenzione: ricordatevi che il valore nullo si scrive NULL, senza le virgolette o gli apici. Altrimenti non è più il valore nullo, ma la stringa formata dalle lettere N, U, L ed L. Ad esempio, se al posto di

insert into aerei values ('minijet','MDD','Super80',NULL,NULL);

scrivo

insert into aerei values ('minijet','MDD','Super80','NULL','NULL');

ottengo due warning, e il seguente risultato:

mysql> select * from aerei;
+----------+------------+---------+------------+----------+
| id       | produttore | modello | dataimm    | numposti |
+----------+------------+---------+------------+----------+
| superjet | boeing     | 747     | 2000-10-10 |      350 |
| minijet  | MDD        | Super80 | 0000-00-00 |        0 |
+----------+------------+---------+------------+----------+
2 rows in set (0.00 sec)

È successo che le due stringhe 'NULL' non sono del tipo giusto per i campi dataimm e numposti, rispettivamente di tipo date e int, e MySQL ha deciso di sotituirli con due valori nulli, ad indicare una situazione di errore.


Per quanto riguarda la II parte dell'esercizio, non è possibile ottenere nessuna delle due tabelle indicate, in quanto id è una chiave primaria e non può contenere nè valori nulli nè un valore duplicato. È vero, tuttavia, che è possibile scrivere qualcosa nel campo id della tabella che, col comando SELECT * FROM AEREI, sembri simile a NULL o a superjet. Ad esempio:

INSERT INTO aerei VALUES ('NULL','boeing','767','2001-2-4',400);

che invece di inserire il valore NULL come chiave primaria inserisce una stringa 'NULL'.

Esercizio 2

I comandi da eseguire per modificare la struttura della tabella aerei sono i seguenti:

ALTER TABLE aerei DROP PRIMARY KEY;
ALTER TABLE aerei ADD commento TEXT;

Dopo l'inserimento il vincolo di chiave primaria non può essere riattivato perchè ci sono due righe con stesso valore per il campo id.

Esercizio 4

Dare il comando:

ALTER TABLE aerei CHANGE id id INT PRIMARY KET AUTO_INCREMENT;

I vecchi valore alfanumerici per id vengono trasformati in valori numerici progressivi.

Valid HTML 4.01 Transitional Valid CSS!