/* \i 'H:\\Linguaggi_1\\PostgreSQL\\Prove1_InseriErrati.sql' */ /* PROVA INSERIMENTI CHE FALLISCONO PERCHE' VIOLANO I VINCOLI DI CHIAVE PRIMARIA O CANDIDATA. */ DROP DATABASE IF EXISTS prove1; /* Cancellazione della versione precedente del db */ CREATE DATABASE prove1; /* Creazione del db */ /* Connessione al db */ \c prove1 /* Creazione dei domini */ CREATE DOMAIN Voto AS INTEGER DEFAULT 18 CHECK (VALUE >= 18 AND VALUE <= 30); /* Creazione della tabella, che definisce i vincoli mediante la sintassi generale. */ CREATE TABLE T ( IdeT1 INTEGER GENERATED BY DEFAULT AS IDENTITY, /* E` la sintassi standard per un intero autoincrementante. */ Incre INTEGER GENERATED BY DEFAULT AS IDENTITY, Vo Voto, CC1 INTEGER NOT NULL, CC2_1 INTEGER NOT NULL, CC2_2 INTEGER, PRIMARY KEY(IdeT1), UNIQUE (CC1), UNIQUE (CC2_1, CC2_2) ); /* Inserimento di tuple e loro visualizzazione */ INSERT INTO T(Vo, CC1, CC2_1, CC2_2) VALUES (17, 11, 22, 23); /* Associa: IdeT1 = 1, Incre = 1 */ /* ERRORE: Il valore 17 dell'attributo $vo e` esterno al dominio di Voto */ SELECT * FROM T; /* Stampa idet1 | incre | vo | cc1 | cc2_1 | cc2_2 -------+-------+----+-----+-------+------- (0 righe) */ INSERT INTO T(Vo, CC1, CC2_1, CC2_2) VALUES (18, 12, 23, 24); /* Associa: IdeT1 = 2, Incre = 2 */ /* Inoltre, stampa INSERT 0 1: ~ il primo numero dopo INSERT e` sempre 0. ~ il secondo numero dopo INSERT indica il numero di righe inserite dal comando (in questo caso e` 1). */ INSERT INTO T(Vo, CC1, CC2_1, CC2_2) VALUES (30, 12, 25, 26); /* Associa: IdeT1 = 3, Incre = 3 */ /* ERRORE: La chiave (cc1)=(12) esiste giĆ . */ INSERT INTO T(Vo, CC1, CC2_1, CC2_2) VALUES (21, 14, 27, 28); /* Associa: IdeT1 = 4, Incre = 4 */ INSERT INTO T(Vo, CC1, CC2_1, CC2_2) VALUES (22, 15, 24, 24); /* Associa: IdeT1 = 5, Incre = 5 */ INSERT INTO T(Vo, CC1, CC2_1) VALUES (22, 17, 24); /* Associa: IdeT1 = 6, Incre = 6 */ SELECT * FROM T; /* Stampa idet1 | incre | vo | cc1 | cc2_1 | cc2_2 -------+-------+----+-----+-------+------- 2 | 2 | 18 | 12 | 23 | 24 4 | 4 | 21 | 14 | 27 | 28 5 | 5 | 22 | 15 | 24 | 24 6 | 6 | 22 | 17 | 24 | */ DELETE FROM T; SELECT * FROM T; /* Stampa idet1 | incre | vo | cc1 | cc2_1 | cc2_2 -------+-------+----+-----+-------+------- (0 righe) */ DROP TABLE T; SELECT * FROM T; /* ERRORE: la tabella 'T' non esiste */ /* Creazione della tabella, che definisce i vincoli mediante la sintassi specifica per un unico attributo. */ CREATE TABLE T ( IdeT1 INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, CC1 INTEGER NOT NULL UNIQUE ); SELECT * FROM T;