È possibile creare e modificare tabelle, vincoli, indici e relazioni in Access scrivendo query di definizione dei dati in visualizzazione SQL. Questo articolo illustra le query di definizione dei dati e come usarle per creare tabelle, vincoli, indici e relazioni. Questo articolo può anche essere utile per decidere quando usare una query di definizione dei dati.
Contenuto dell'articolo
Panoramica
A differenza di altre query di Access, una query di definizione dei dati non recupera i dati. Una query di definizione dei dati usa invece il linguaggio di definizione dei dati per creare, modificare o eliminare oggetti di database.
Nota: Il linguaggio DDL (Data Definition Language) fa parte di SQL (Structured Query Language).
Le query di definizione dei dati possono risultare molto utili. È possibile eliminare e ricreare regolarmente parti dello schema di database semplicemente eseguendo alcune query. È consigliabile usare una query di definizione dei dati se si ha familiarità con le istruzioni SQL e si prevede di eliminare e ricreare particolari tabelle, vincoli, indici o relazioni.
Avviso: L'uso di query di definizione dei dati per modificare gli oggetti di database può essere rischioso, perché le azioni non sono abbinate a finestre di dialogo di conferma. Se si commette un errore, è possibile perdere dati o modificare inavvertitamente la struttura di una tabella. Prestare attenzione quando si usa una query di definizione dei dati per modificare gli oggetti nel database. Se non si è responsabili della gestione del database in uso, rivolgersi all'amministratore del database prima di eseguire una query di definizione dei dati.
Importante: Creare una copia di backup di tutte le tabelle interessate prima di eseguire una query di definizione dei dati.
Parole chiave DDL
Parola chiave |
Usare |
CREATE |
Creare un indice o una tabella che non esiste già. |
ALTER |
Modificare una tabella o una colonna esistente. |
DROP |
Eliminare una tabella, una colonna o un vincolo esistente. |
ADD |
Aggiungere una colonna o un vincolo a una tabella. |
COLUMN |
Usare con ADD, ALTER o DROP |
CONSTRAINT |
Usare con ADD, ALTER o DROP |
INDEX |
Usare con CREATE |
TABLE |
Usare con ALTER, CREATE o DROP |
Creare o modificare una tabella
Per creare una tabella, usare un comando CREATE TABLE. La sintassi di un comando CREA TABELLA è la seguente:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...][, CONSTRAINT constraint1 [, ...]])
Gli unici elementi necessari di un comando CREATE TABLE sono il comando CREATE TABLE stesso e il nome della tabella, ma in genere è consigliabile definire alcuni campi o altri aspetti della tabella. Si consideri questo semplice esempio.
Si supponga di voler creare una tabella in cui memorizzare il nome, l'anno e il prezzo delle auto usate che si intende acquistare. Si vogliono consentire fino a 30 caratteri per il nome e 4 caratteri per l'anno. Per usare una query di definizione dei dati per creare la tabella, eseguire le operazioni seguenti:
Nota: Potrebbe essere necessario abilitare il contenuto del database per eseguire una query di definizione dei dati:
-
Sulla barra dei messaggi, fare clic su Abilita contenuto.
Creare una tabella
-
Nel gruppo Codice & Macro della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Definizione dati.
La griglia di struttura è nascosta e viene visualizzata la scheda dell'oggetto visualizzazione SQL.
-
Digitare l'istruzione SQL seguente:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
Modificare una tabella
Per modificare una tabella, usare un comando ALTER TABLE. È possibile usare un comando ALTER TABLE per aggiungere, modificare o eliminare colonne o vincoli. La sintassi di un comando ALTER TABLE è la seguente:
ALTER TABLE table_name predicate
dove predicato può essere uno qualsiasi dei seguenti:
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Si supponga di voler aggiungere un campo di testo di 10 caratteri per archiviare informazioni sulla condizione di ogni auto. Ecco come procedere:
-
Nel gruppo Codice & Macro della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Definizione dati.
La griglia di struttura è nascosta e viene visualizzata la scheda dell'oggetto visualizzazione SQL.
-
Digitare l'istruzione SQL seguente:
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
Creazione di un indice
Per creare un indice in una tabella esistente, usare il comando CREATE INDEX. La sintassi di un comando CREATE INDEX è la seguente:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...]) [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Gli unici elementi obbligatori sono il comando CREATE INDEX, il nome dell'indice, l'argomento ON, il nome della tabella che contiene i campi da indicizzare e l'elenco dei campi da includere nell'indice.
-
L'argomento DESC determina la creazione dell'indice in ordine decrescente, che può essere utile se si eseguono frequentemente query che cercano i primi valori per il campo indicizzato o che ordinano il campo indicizzato in ordine decrescente. Per impostazione predefinita, un indice viene creato in ordine crescente.
-
L'argomento WITH PRIMARY stabilisce il campo o i campi indicizzati come chiave primaria della tabella.
-
L'argomento WITH DISALLOW NULL fa sì che l'indice richieda l'immissione di un valore per il campo indicizzato, ovvero che i valori Null non siano consentiti.
Si supponga di avere una tabella denominata Auto con campi in cui sono archiviati il nome, l'anno, il prezzo e la condizione delle auto usate che si intende acquistare. Si supponga inoltre che la tabella sia diventata di grandi dimensioni e che il campo anno sia spesso incluso nelle query. È possibile creare un indice nel campo Anno per consentire alle query di restituire i risultati più rapidamente usando la procedura seguente:
-
Nel gruppo Codice & Macro della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Definizione dati.
La griglia di struttura è nascosta e viene visualizzata la scheda dell'oggetto visualizzazione SQL.
-
Digitare l'istruzione SQL seguente:
CREATE INDEX YearIndex ON Cars (Anno)
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
Creare un vincolo o una relazione
Un vincolo stabilisce una condizione logica che un campo o una combinazione di campi deve soddisfare quando vengono inseriti valori. Ad esempio, un vincolo UNIQUE impedisce al campo vincolato di accettare un valore che duplica un valore esistente per il campo.
Una relazione è un tipo di vincolo che fa riferimento ai valori di un campo o a una combinazione di campi in un'altra tabella per determinare se è possibile inserire un valore nel campo vincolato o in una combinazione di campi. Non si usa una parola chiave speciale per indicare che un vincolo è una relazione.
Per creare un vincolo, usare una clausola CONSTRAINT in un comando CREATE TABLE o ALTER TABLE. Esistono due tipi di clausole CONSTRAINT: una per la creazione di un vincolo su un singolo campo e un'altra per la creazione di un vincolo su più campi.
Vincoli a campo singolo
Una clausola CONSTRAINT a campo singolo segue immediatamente la definizione del campo che vincola e presenta la sintassi seguente:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)] [ON UPDATE {CASCADE | SET NULL}] [ON DELETE {CASCADE | SET NULL}]}
Si supponga di avere una tabella denominata Auto con campi in cui sono archiviati il nome, l'anno, il prezzo e la condizione delle auto usate che si intende acquistare. Si supponga inoltre di dimenticare spesso di immettere un valore per la condizione dell'auto e di voler sempre registrare queste informazioni. È possibile creare un vincolo nel campo Condizione che impedisce di lasciare vuoto il campo usando la procedura seguente:
-
Nel gruppo Codice & Macro della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Definizione dati.
La griglia di struttura è nascosta e viene visualizzata la scheda dell'oggetto visualizzazione SQL.
-
Digitare l'istruzione SQL seguente:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
Si supponga che, dopo qualche istante, si noterà che nel campo Condizione sono presenti molti valori simili che dovrebbero essere uguali. Ad esempio, alcune auto hanno un valore di condizione di scarsa e altre hanno un valore di cattivo.
Nota: Se si vogliono seguire le procedure rimanenti, aggiungere alcuni dati falsi alla tabella Auto creata nei passaggi precedenti.
Dopo aver pulito i valori in modo che siano più coerenti, è possibile creare una tabella denominata CarCondition con un campo denominato Condizione che contiene tutti i valori da usare per la condizione delle auto:
-
Nel gruppo Codice & Macro della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Definizione dati.
La griglia di struttura è nascosta e viene visualizzata la scheda dell'oggetto visualizzazione SQL.
-
Digitare l'istruzione SQL seguente:
CREATE TABLE CarCondition (Condizione TESTO(10))
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
-
Creare una chiave primaria per la tabella usando un'istruzione ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Per inserire i valori dal campo Condizione della tabella Cars nella nuova tabella CarCondition, digitare il codice SQL seguente nella scheda dell'oggetto visualizzazione SQL:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Nota: L'istruzione SQL in questo passaggio è un query di accodamento. A differenza di una query di definizione dei dati, una query di accodamento termina con un punto e virgola.
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
Creare una relazione usando un vincolo
Per richiedere che qualsiasi nuovo valore inserito nel campo Condizione della tabella Auto corrisponda a un valore del campo Condizione nella tabella CarCondition, è quindi possibile creare una relazione tra CarCondition e Cars nel campo denominato Condizione usando la procedura seguente:
-
Nel gruppo Codice & Macro della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Definizione dati.
La griglia di struttura è nascosta e viene visualizzata la scheda dell'oggetto visualizzazione SQL.
-
Digitare l'istruzione SQL seguente:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
Vincoli su più campi
Una clausola CONSTRAINT multicampo può essere usata solo all'esterno di una clausola di definizione di campo e ha la sintassi seguente:
CONSTRAINT constraint_name
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) | UNIQUE (unique1[, unique2[, ...]]) | NOT NULL (notnull1[, notnull2[, ...]]) | FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]]) REFERENCES foreign_table [(fk_field1[, fk_field2[, ...]])] | [ON UPDATE {CASCADE | SET NULL}] [ON DELETE {CASCADE | SET NULL}]}
Si consideri un altro esempio che usa la tabella Auto. Si supponga di voler verificare che due record nella tabella Auto non abbiano lo stesso set di valori per Nome, Anno, Condizione e Prezzo. È possibile creare un vincolo UNIQUE applicabile a questi campi usando la procedura seguente:
-
Nel gruppo Codice & Macro della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Definizione dati.
La griglia di struttura è nascosta e viene visualizzata la scheda dell'oggetto visualizzazione SQL.
-
Digitare l'istruzione SQL seguente:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (nome, anno, condizione, prezzo)
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.