Erstellen oder Ändern von Tabellen oder Indizes mithilfe einer Datendefinitionsabfrage

Gilt für
Access für Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Sie können Tabellen, Einschränkungen, Indizes und Beziehungen in Access erstellen und ändern, indem Sie Datendefinitionsabfragen in der 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, um Datenbankobjekte zu erstellen, zu ändern oder zu löschen.

Hinweis

Die Datendefinitionssprache (Data Definition Language, DDL) ist Teil der strukturierte Abfragesprache (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 bestimmte Tabellen, Einschränkungen, Indizes oder Beziehungen löschen und neu erstellen möchten.

Warnung

Die Verwendung von Datendefinitionsabfragen zum Ändern von Datenbankobjekten kann riskant sein, da die Aktionen nicht von Bestätigungsdialogfeldern begleitet werden. Wenn Ihnen ein Fehler unterläuft, 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 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 Verwendung
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 Hinzufügen einer Spalte oder Einschränkung zu einer Tabelle.
COLUMN Verwendung mit ADD, ALTER oder DROP
CONSTRAINT Verwendung mit ADD, ALTER oder DROP
INDEX Verwendung mit CREATE
TABLE Verwendung mit ALTER, CREATE oder DROP

Seitenanfang

Erstellen oder Ändern einer Tabelle

Zum Erstellen einer Tabelle verwenden Sie den Befehl CREATE TABLE. Ein Befehl "Tabelle erstellen" hat die folgende Syntax:

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 CREATE TABLE-Befehl selbst und der Name der Tabelle, aber in der Regel möchten Sie einige Felder oder andere Aspekte der Tabelle definieren. Betrachten Sie dieses einfache Beispiel.

Angenommen, Sie möchten eine Tabelle mit dem Namen, dem Baujahr und dem Preis von Gebrauchtwagen erstellen, die Sie kaufen möchten. Sie können 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 zuerst den Inhalt der Datenbank aktivieren, damit eine Datendefinitionsabfrage ausgeführt werden kann:

  • Klicken Sie auf der Statusleiste auf Inhalt aktivieren.

Erstellen einer Tabelle

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
  2. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
    Der Entwurfsbereich ist ausgeblendet, und die Registerkarte SQL-Ansichtsobjekt wird angezeigt.
  3. Geben Sie die folgende SQL-Anweisung ein:
    CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
  4. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

Ändern einer Tabelle

Zum Ändern einer Tabelle verwenden Sie den Befehl ALTER TABLE. Sie können den Befehl ALTER TABLE verwenden, um Spalten oder Einschränkungen hinzuzufügen, zu ändern oder zu löschen (entfernen). Ein ALTER TABLE-Befehl hat die folgende Syntax:

ALTER TABLE table_name predicate

wobei Prädikat eine der folgenden Optionen sein kann:

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, um Informationen über den Zustand jedes Autos zu speichern. Sie haben folgende Möglichkeiten:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
  2. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
    Der Entwurfsbereich ist ausgeblendet, und die Registerkarte SQL-Ansichtsobjekt wird angezeigt.
  3. Geben Sie die folgende SQL-Anweisung ein:
    ALTER TABLE Cars SPALTE HINZUFÜGEN Bedingungstext(10)
  4. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

Seitenanfang

Erstellen eines Indexes

Um einen Index für eine vorhandene Tabelle zu erstellen, verwenden Sie den Befehl CREATE INDEX. Der Befehl "Index erstellen" hat die folgende Syntax:

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 Indexes, 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 aufgenommen werden sollen.

  • Das Argument DESC bewirkt, dass der Index in absteigender Reihenfolge erstellt wird. Dies kann nützlich sein, wenn Sie häufig Abfragen ausführen, die nach Top-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 wird das indizierte Feld bzw. die indizierten Felder als Primärschlüssel der Tabelle festgelegt.
  • Das WITH DISALLOW NULL-Argument bewirkt, dass der Index die Eingabe eines Werts für das indizierte Feld erfordert, d. h., Nullwerte sind nicht zulässig.

Angenommen, Sie verfügen über eine Tabelle namens "Autos" mit Feldern, in denen Name, Baujahr, Preis und Zustand von Gebrauchtwagen gespeichert sind, die Sie kaufen möchten. Angenommen, die Tabelle ist größer geworden und Sie schließen das Feld "Jahr" häufig in Abfragen ein. Sie können einen Index für das Feld "Jahr" erstellen, damit Ihre Abfragen Ergebnisse schneller zurückgeben, indem Sie das folgende Verfahren verwenden:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
  2. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
    Der Entwurfsbereich ist ausgeblendet, und die Registerkarte SQL-Ansichtsobjekt wird angezeigt.
  3. Geben Sie die folgende SQL-Anweisung ein:
    CREATE INDEX YearIndex ON Cars (Year)
  4. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

Seitenanfang

Erstellen einer Einschränkung oder Beziehung

Mit einer Einschränkung wird eine logische Bedingung festgelegt, die ein Feld oder eine Feldkombination beim Einfügen von Werten erfüllen muss. Eine UNIQUE-Einschränkung verhindert beispielsweise, dass das eingeschränkte Feld einen Wert akzeptiert, der einen vorhandenen Wert für das Feld duplizieren würde.

Eine Beziehung ist ein Einschränkungstyp, der auf die Werte eines Felds oder einer Feldkombination in einer anderen Tabelle verweist, um zu bestimmen, ob ein Wert in das eingeschränkte Feld oder die Feldkombination eingefügt werden kann. Sie verwenden kein spezielles Schlüsselwort (Keyword), um anzugeben, dass eine Einschränkung eine Beziehung ist.

Zum Erstellen einer Einschränkung verwenden Sie eine CONSTRAINT-Klausel in einem Befehl CREATE TABLE oder ALTER TABLE. 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.

Einschränkungen für ein Feld

Eine CONSTRAINT-Klausel mit einem Feld folgt unmittelbar der Definition des Feldes, das sie einschränkt, und hat die folgende Syntax:

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 namens "Autos" mit Feldern, in denen Name, Baujahr, Preis und Zustand von Gebrauchtwagen gespeichert sind, die Sie kaufen möchten. Angenommen, Sie vergessen häufig, einen Wert für den Zustand des Autos einzugeben, und dass Sie diese Informationen immer aufzeichnen möchten. Sie können mit dem folgenden Verfahren eine Einschränkung für das Feld "Bedingung" erstellen, die verhindert, dass das Feld leer bleibt:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
  2. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
    Der Entwurfsbereich ist ausgeblendet, und die Registerkarte SQL-Ansichtsobjekt wird angezeigt.
  3. Geben Sie die folgende SQL-Anweisung ein:
    ALTER TABLE Cars ALTER COLUMN Bedingung TEXT EINSCHRÄNKUNG ConditionRequired NOT NULL
  4. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

Angenommen, Sie stellen nach einer Weile fest, dass es im Feld "Bedingung" viele ähnliche Werte gibt, die identisch sein sollten. Zum Beispiel haben einige der Autos den Zustandswert schlecht und andere den Wert schlecht.

Hinweis

Wenn Sie die verbleibenden Schritte ausführen möchten, fügen Sie der Tabelle "Autos", die Sie in den vorherigen Schritten erstellt haben, einige gefälschte Daten hinzu.

Nachdem Sie die Werte sauber gemacht haben, damit sie konsistenter sind, können Sie eine Tabelle mit dem Namen "CarCondition" mit einem Feld namens "Condition" erstellen, die alle Werte enthält, die Sie für den Zustand von Autos verwenden möchten:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.

  2. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
    Der Entwurfsbereich ist ausgeblendet, und die Registerkarte SQL-Ansichtsobjekt wird angezeigt.

  3. Geben Sie die folgende SQL-Anweisung ein:
    CREATE TABLE CarCondition (Condition TEXT(10))

  4. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

  5. Erstellen Sie einen Primärschlüssel für die Tabelle, indem Sie eine ALTER TABLE-Anweisung verwenden:
    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

  6. Um die Werte aus dem Feld Zustand der Tabelle Autos in die neue Tabelle CarCondition einzufügen, geben Sie den folgenden SQL 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.

  7. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

Erstellen einer Beziehung mithilfe einer Einschränkung

Um vorzuschreiben, dass ein neuer Wert, der in das Feld "Zustand" der Tabelle "Autos" eingefügt wird, mit einem Wert aus dem Feld "Zustand" in der Tabelle "Artikelzustand" übereinstimmt, können Sie dann eine Beziehung zwischen "Zustand zustand" und "Autos" im Feld "Zustand" erstellen, indem Sie wie folgt vorgehen:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
  2. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
    Der Entwurfsbereich ist ausgeblendet, und die Registerkarte SQL-Ansichtsobjekt wird angezeigt.
  3. Geben Sie die folgende SQL-Anweisung ein:
    ALTER TABLE Cars ALTER COLUMN Bedingung TEXT EINSCHRÄNKUNG FKeyCondition VERWEISE CarCondition (Bedingung)
  4. 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 hat die folgende Syntax:

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}]}

Betrachten Sie ein weiteres Beispiel, in dem die Tabelle "Autos" verwendet wird. Angenommen, Sie möchten sicherstellen, dass keine zwei Datensätze in der Tabelle Autos dieselbe Gruppe von Werten für Name, Jahr, Zustand und Preis enthalten. Sie können mit dem folgenden Verfahren eine UNIQUE-Einschränkung erstellen, die für diese Felder gilt:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Makros & Code auf Abfrageentwurf.
  2. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.
    Der Entwurfsbereich ist ausgeblendet, und die Registerkarte SQL-Ansichtsobjekt wird angezeigt.
  3. Geben Sie die folgende SQL-Anweisung ein:
    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (Name, Jahr, Zustand, Preis)
  4. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

Seitenanfang