Sie können Tabellen, Einschränkungen, Indizes und Beziehungen in Access erstellen und ändern, indem Sie Datendefinitionsabfragen in die SQL-Ansicht schreiben. In diesem Artikel werden Datendefinitionsabfragen und deren Verwendung zum Erstellen von Tabellen, Einschränkungen, Indizes und Beziehungen erläutert. Dieser Artikel kann Ihnen auch bei der Entscheidung helfen, wann eine Datendefinitionsabfrage verwendet werden soll.
Inhalt dieses Artikels
Übersicht
Im Gegensatz zu anderen Access-Abfragen ruft eine Datendefinitionsabfrage keine Daten ab. Stattdessen verwendet eine Datendefinitionsabfrage die Datendefinitionssprache zum Erstellen, Ändern oder Löschen von Datenbankobjekten.
Hinweis: Die Datendefinitionssprache (Data Definition Language, DDL) ist Teil der Structured Query Language (SQL).
Datendefinitionsabfragen können sehr praktisch sein. Sie können Regelmäßig Teile Ihres Datenbankschemas löschen und neu erstellen, indem Sie einfach einige Abfragen ausführen. Erwägen Sie die Verwendung einer Datendefinitionsabfrage, wenn Sie mit SQL-Anweisungen vertraut sind und planen, bestimmte Tabellen, Einschränkungen, Indizes oder Beziehungen zu löschen und neu zu erstellen.
Warnung: Die Verwendung von Datendefinitionsabfragen zum Ändern von Datenbankobjekten kann riskant sein, da die Aktionen nicht von Bestätigungsdialogfeldern begleitet werden. Wenn Sie einen Fehler machen, können Sie Daten verlieren oder versehentlich den Entwurf einer Tabelle ändern. Seien Sie vorsichtig, wenn Sie eine Datendefinitionsabfrage verwenden, um Objekte in Ihrer Datenbank zu ändern. Wenn Sie nicht für die Wartung der von Ihnen verwendeten Datenbank verantwortlich sind, sollten Sie sich vor dem Ausführen einer Datendefinitionsabfrage an den Administrator der Datenbank wenden.
Wichtig: Erstellen Sie eine Sicherungskopie aller beteiligten Tabellen, bevor Sie eine Datendefinitionsabfrage ausführen.
DDL-Schlüsselwörter
Schlüsselwort |
Bedeutung |
CREATE |
Erstellen Sie einen Index oder eine Tabelle, die noch nicht vorhanden ist. |
ALTER |
Ändern einer vorhandenen Tabelle oder Spalte. |
DROP |
Löschen sie eine vorhandene Tabelle, Spalte oder Einschränkung. |
ADD |
Fügen Sie einer Tabelle eine Spalte oder einschränkung hinzu. |
COLUMN |
Verwenden mit ADD, ALTER oder DROP |
CONSTRAINT |
Verwenden mit ADD, ALTER oder DROP |
INDEX |
Verwenden mit CREATE |
TABLE |
Verwenden mit ALTER, CREATE oder DROP |
Erstellen oder Ändern einer Tabelle
Zum Erstellen einer Tabelle verwenden Sie den Befehl CREATE TABLE. Ein CREATE TABLE-Befehl weist die folgende Syntax auf:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...][, CONSTRAINT constraint1 [, ...]])
Die einzigen erforderlichen Elemente eines CREATE TABLE-Befehls sind der BEFEHL CREATE TABLE selbst und der Name der Tabelle. In der Regel möchten Sie jedoch einige Felder oder andere Aspekte der Tabelle definieren. Betrachten Sie dieses einfache Beispiel.
Angenommen, Sie möchten eine Tabelle erstellen, in der der Name, das Jahr und der Preis von Gebrauchtwagen gespeichert werden, die Sie für den Kauf in Betracht ziehen. Sie möchten bis zu 30 Zeichen für den Namen und 4 Zeichen für das Jahr zulassen. Gehen Sie wie folgt vor, um eine Datendefinitionsabfrage zum Erstellen der Tabelle zu verwenden:
Hinweis: Möglicherweise müssen Sie zunächst den Inhalt der Datenbank aktivieren, damit eine Datendefinitionsabfrage ausgeführt werden kann:
-
Klicken Sie auf der Statusleiste auf Inhalt aktivieren.
Erstellen einer Tabelle
-
Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Das Entwurfsraster ist ausgeblendet, und die Objektregisterkarte der SQL-Ansicht wird angezeigt.
-
Geben Sie die folgende SQL-Anweisung ein:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Ändern einer Tabelle
Um eine Tabelle zu ändern, verwenden Sie einen ALTER TABLE-Befehl. Sie können einen ALTER TABLE-Befehl verwenden, um Spalten oder Einschränkungen hinzuzufügen, zu ändern oder zu löschen (entfernen). Ein ALTER TABLE-Befehl weist die folgende Syntax auf:
ALTER TABLE table_name predicate
Dabei kann das Prädikat eines der folgenden Sein:
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Angenommen, Sie möchten ein 10-stelliges Textfeld hinzufügen, in dem Informationen zum Zustand der einzelnen Autos gespeichert werden. Sie haben folgende Möglichkeiten:
-
Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Das Entwurfsraster ist ausgeblendet, und die Objektregisterkarte der SQL-Ansicht wird angezeigt.
-
Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Erstellen eines Indexes
Um einen Index für eine vorhandene Tabelle zu erstellen, verwenden Sie den Befehl CREATE INDEX. Ein CREATE INDEX-Befehl weist die folgende Syntax auf:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...]) [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Die einzigen erforderlichen Elemente sind der Befehl CREATE INDEX, der Name des Index, das ON-Argument, der Name der Tabelle, die die Felder enthält, die Sie indizieren möchten, und die Liste der Felder, die in den Index eingeschlossen werden sollen.
-
Das DESC-Argument bewirkt, dass der Index in absteigender Reihenfolge erstellt wird. Dies kann nützlich sein, wenn Sie häufig Abfragen ausführen, die nach den obersten Werten für das indizierte Feld suchen oder das indizierte Feld in absteigender Reihenfolge sortieren. Standardmäßig wird ein Index in aufsteigender Reihenfolge erstellt.
-
Mit dem ARGUMENT WITH PRIMARY werden die indizierten Felder als Primärschlüssel der Tabelle festgelegt.
-
Das ARGUMENT WITH DISALLOW NULL bewirkt, dass der Index erfordert, dass ein Wert für das indizierte Feld eingegeben werden muss, d. h., NULL-Werte sind nicht zulässig.
Angenommen, Sie verfügen über eine Tabelle mit dem Namen Cars mit Feldern, in denen Name, Jahr, Preis und Zustand von Gebrauchtwagen gespeichert werden, die Sie für den Kauf in Betracht ziehen. Nehmen wir auch an, dass die Tabelle groß geworden ist und Sie das Feld "Jahr" häufig in Abfragen einschließen. Mit dem folgenden Verfahren können Sie einen Index für das Feld Jahr erstellen, damit Ihre Abfragen schneller Ergebnisse zurückgeben können:
-
Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Das Entwurfsraster ist ausgeblendet, und die Objektregisterkarte der SQL-Ansicht wird angezeigt.
-
Geben Sie die folgende SQL-Anweisung ein:
CREATE INDEX YearIndex ON Cars (Year)
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Erstellen einer Einschränkung oder beziehung
Eine Einschränkung stellt eine logische Bedingung fest, die ein Feld oder eine Kombination von Feldern erfüllen muss, wenn Werte eingefügt werden. Beispielsweise verhindert eine UNIQUE-Einschränkung, dass das eingeschränkte Feld einen Wert akzeptiert, der einen vorhandenen Wert für das Feld dupliziert.
Eine Beziehung ist ein Einschränkungstyp, der auf die Werte eines Felds oder einer Kombination von Feldern in einer anderen Tabelle verweist, um zu bestimmen, ob ein Wert in das eingeschränkte Feld oder eine Kombination von Feldern eingefügt werden kann. Sie verwenden kein spezielles Schlüsselwort, um anzugeben, dass eine Einschränkung eine Beziehung ist.
Zum Erstellen einer Einschränkung verwenden Sie eine CONSTRAINT-Klausel in einem CREATE TABLE- oder ALTER TABLE-Befehl. Es gibt zwei Arten von CONSTRAINT-Klauseln: eine zum Erstellen einer Einschränkung für ein einzelnes Feld und eine andere zum Erstellen einer Einschränkung für mehrere Felder.
Einzelfeldeinschränkungen
Eine CONSTRAINT-Klausel mit nur einem Feld folgt sofort der Definition des Felds, das sie einschränkt, und weist die folgende Syntax auf:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)] [ON UPDATE {CASCADE | SET NULL}] [ON DELETE {CASCADE | SET NULL}]}
Angenommen, Sie verfügen über eine Tabelle mit dem Namen Cars mit Feldern, in denen Name, Jahr, Preis und Zustand von Gebrauchtwagen gespeichert werden, die Sie für den Kauf in Betracht ziehen. Nehmen Wir auch an, dass Sie häufig vergessen, einen Wert für den Zustand des Fahrzeugs einzugeben, und dass Sie diese Informationen immer aufzeichnen möchten. Sie können eine Einschränkung für das Feld Bedingung erstellen, die verhindert, dass Sie das Feld leer lassen, indem Sie das folgende Verfahren verwenden:
-
Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Das Entwurfsraster ist ausgeblendet, und die Objektregisterkarte der SQL-Ansicht wird angezeigt.
-
Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Nehmen wir nun an, dass Sie nach einer Weile feststellen, dass im Feld Bedingung viele ähnliche Werte vorhanden sind, die identisch sein sollten. Beispielsweise haben einige der Autos den Zustandswert "schlecht " und andere den Wert "schlecht".
Hinweis: Wenn Sie die verbleibenden Verfahren befolgen möchten, fügen Sie der Tabelle Cars, die Sie in den vorherigen Schritten erstellt haben, einige gefälschte Daten hinzu.
Nachdem Sie die Werte bereinigt haben, damit sie konsistenter sind, können Sie eine Tabelle mit dem Namen CarCondition mit einem Feld namens Bedingung erstellen, das alle Werte enthält, die Sie für die Bedingung von Autos verwenden möchten:
-
Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Das Entwurfsraster ist ausgeblendet, und die Objektregisterkarte der SQL-Ansicht wird angezeigt.
-
Geben Sie die folgende SQL-Anweisung ein:
CREATE TABLE CarCondition (BedingungsTEXT(10))
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
-
Erstellen Sie mithilfe einer ALTER TABLE-Anweisung einen Primärschlüssel für die Tabelle:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Um die Werte aus dem Feld Bedingung der Tabelle Cars in die neue CarCondition-Tabelle einzufügen, geben Sie den folgenden SQL-Wert auf der Registerkarte SQL-Ansichtsobjekt ein:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Hinweis: Die SQL-Anweisung in diesem Schritt ist eine Anfügeabfrage. Im Gegensatz zu einer Datendefinitionsabfrage endet eine Anfügeabfrage mit einem Semikolon.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Erstellen einer Beziehung mithilfe einer Einschränkung
Wenn Sie festlegen möchten, dass jeder neue Wert, der in das Feld Bedingung der Tabelle Cars eingefügt wird, mit einem Wert des Felds Bedingung in der Tabelle CarCondition übereinstimmt, können Sie dann eine Beziehung zwischen CarCondition und Cars im Feld Bedingung erstellen, indem Sie das folgende Verfahren verwenden:
-
Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Das Entwurfsraster ist ausgeblendet, und die Objektregisterkarte der SQL-Ansicht wird angezeigt.
-
Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Bedingung)
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.
Einschränkungen für mehrere Felder
Eine CONSTRAINT-Klausel mit mehreren Feldern kann nur außerhalb einer Felddefinitionsklausel verwendet werden und weist die folgende Syntax auf:
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}]}
Sehen Sie sich ein weiteres Beispiel an, in dem die Tabelle Cars verwendet wird. Angenommen, Sie möchten sicherstellen, dass keine zwei Datensätze in der Tabelle Cars denselben Satz von Werten für Name, Jahr, Bedingung und Preis aufweisen. Sie können eine UNIQUE-Einschränkung erstellen, die für diese Felder gilt, indem Sie das folgende Verfahren verwenden:
-
Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
Das Entwurfsraster ist ausgeblendet, und die Objektregisterkarte der SQL-Ansicht wird angezeigt.
-
Geben Sie die folgende SQL-Anweisung ein:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (Name, Jahr, Bedingung, Preis)
-
Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.