Erstellen oder Ändern von Tabellen oder Indizes mithilfe einer Datendefinitionsabfrage

Durch Schreiben von Datendefinitionsabfragen in der SQL-Ansicht können Sie Tabellen, Einschränkungen, Indizes und Beziehungen erstellen und ändern.

In diesem Artikel wird erklärt, was Datendefinitionsabfragen sind und wie mit ihnen Abfragen, Einschränkungen, Tabellen, Indizes und Beziehungen erstellt werden. Dieser Artikel kann Ihnen bei der Entscheidung helfen, wann eine Datendefinitionsabfrage verwendet werden sollte.

Hinweis : Sie können diese Schrittfolgen in einer Webdatenbank nicht verwenden.

Inhalt dieses Artikels

Übersicht

Erstellen oder Ändern von Tabellen

Erstellen eines Indexes

Erstellen einer Einschränkung oder einer Beziehung

Übersicht

Im Gegensatz zu anderen Abfragen werden mit einer Datendefinitionsabfrage keine Daten abgerufen. Stattdessen verwendet eine Datendefinitionsabfrage DLL (Data Definition Language) zum Erstellen, Ändern und Löschen von Datenbankobjekten.

Hinweis : DDL (Data Definition Language) ist Teil von SQL (Structured Query Language).

Datendefinitionsabfragen sind sehr komfortabel. Durch einfaches Ausführen verschiedener Abfragen können Sie Teile Ihres Datenbankschemas regelmäßig löschen und neu erstellen. Erwägen Sie den Einsatz einer Datendefinitionsabfrage, wenn Sie mit SQL-Anweisungen vertraut sind und planen, bestimmte Tabellen, Einschränkungen, Indizes und Beziehungen zu löschen und neu zu erstellen.

Warnung : Die Verwendung von Datendefinitionsabfragen zum Ändern von Datenbankobjekten kann gefährlich sein, da für die Aktionen keine Bestätigungsdialogfelder angezeigt werden. Wenn Sie einen Fehler machen, laufen Sie Gefahr, Daten zu verlieren oder den Entwurf einer Tabelle unabsichtlich zu ändern. Gehen Sie bei der Verwendung von Datendefinitionsabfragen zum Ändern von Objekten in der Datenbank mit äußerster Vorsicht vor. Wenn Sie für die Pflege der von Ihnen verwendeten Datenbank nicht zuständig sind, sollten Sie vor der Ausführung einer Datenbankdefinitionsabfrage den Datenbankadministrator zu Rate ziehen.

Wichtig : Erstellen Sie eine Sicherung aller beteiligten Tabellen, bevor Sie eine Datendefinitionsabfrage ausführen.

DDL-Schlüsselwörter

Schlüsselwort

Bedeutung

CREATE

Dient zum Erstellen eines Indexes oder einer Tabelle, der/die noch nicht vorhanden ist

ALTER

Dient zum Ändern einer vorhandenen Tabelle oder Spalte

DROP

Dient zum Löschen einer vorhandenen Tabelle, Spalte oder Einschränkung

ADD

Dient zum Hinzufügen einer Spalte oder Einschränkung zu einer Tabelle

COLUMN

Wird mit ADD, ALTER und DROP verwendet

CONSTRAINT

Wird mit ADD, ALTER und DROP verwendet

INDEX

Wird mit CREATE verwendet

TABLE

Wird mit ALTER, CREATE und DROP verwendet

Seitenanfang

Erstellen oder Ändern von Tabellen

Zum Erstellen einer Tabelle verwenden Sie den CREATE TABLE-Befehl. Der CREATE TABLE-Befehl hat die folgende Syntax:

CREATE TABLE table_name 
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])

Die einzigen obligatorischen Elemente eines CREATE TABLE-Befehls sind der CREATE TABLE-Befehl selbst und der Name der Tabelle. Doch in der Regel sollen auch einige Felder und andere Aspekte der Tabelle definiert werden. Betrachten Sie dieses einfache Beispiel.

Einmal angenommen, Sie möchten eine Tabelle erstellen, in der der Name, das Baujahr und der Preis von Gebrauchtwagen gespeichert werden soll, deren Kauf Sie in Betracht ziehen. Für das Namensfeld möchten Sie bis zu 30 Zeichen vorsehen, und das Feld für das Jahr soll 4 Zeichen umfassen. Wenn Sie diese Tabelle mit einer Datendefinitionsabfrage erstellen möchten, gehen Sie wie folgt vor:

Hinweis : Damit eine Datendefinitionsabfrage ausgeführt werden kann, müssen Sie ggf. zunächst den Inhalt der Datenbank aktivieren:

  • Klicken Sie auf der Statusleiste auf Inhalt aktivieren.

Erstellen einer Tabelle

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Clientabfragen auf Abfrageentwurf.

  2. Schließen Sie das Dialogfeld Tabelle anzeigen.

  3. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.

    Der Entwurfsbereich wird ausgeblendet, die Objektregisterkarte SQL-Ansicht angezeigt.

  4. Geben Sie die folgende SQL-Anweisung ein:

    CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)

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

Ändern einer Tabelle

Zum Ändern einer Tabelle verwenden Sie den ALTER TABLE-Befehl. Mithilfe des ALTER TABLE-Befehls können Sie Spalten oder Einschränkungen hinzufügen, ändern oder verwerfen (löschen). Der ALTER TABLE-Befehl hat folgende Syntax:

ALTER TABLE table_name predicate

wobei predicate für jede der folgenden Entitäten stehen 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

Einmal angenommen, Sie möchten ein 10 Zeichen umfassendes Feld zum Speichern von Angaben zum Zustand des jeweiligen Wagens hinzufügen. In dem Fall können Sie wie folgt vorgehen:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Clientabfragen auf Abfrageentwurf.

  2. Schließen Sie das Dialogfeld Tabelle anzeigen.

  3. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.

    Der Entwurfsbereich wird ausgeblendet und die Objektregisterkarte SQL-Ansicht angezeigt.

  4. Geben Sie die folgende SQL-Anweisung ein:

    ALTER TABLE Cars ADD COLUMN Condition TEXT(10)

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

Seitenanfang

Erstellen eines Indexes

Zum Erstellen eines Indexes für eine vorhandene Tabelle verwenden Sie den CREATE INDEX-Befehl. Der CREATE INDEX-Befehl hat die folgende Syntax:

CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

Die einzigen obligatorischen Elemente sind der CREATE INDEX-Befehl, der Name des Index, das Argument ON, der Name der Tabelle, die die Felder enthält, die Sie indizieren möchten, sowie die Liste der Felder, die in den Index eingeschlossen werden sollen.

  • Mit dem Argument DESC wird festgelegt, dass der Index in absteigender Reihenfolge erstellt werden soll, was hilfreich sein kann, wenn Sie häufig Abfragen ausführen, mit denen Sie nach den höchsten Werten des indizierten Feldes suchen, oder mit denen das indizierte Feld in absteigender Reihenfolge sortiert wird. Standardmäßig wird ein Index in aufsteigender Reihenfolge erstellt.

  • Mit dem Argument WITH PRIMARY werden das oder die indizierten Felder als Primärschlüssel der Tabelle eingerichtet.

  • Das Argument WITH DISALLOW NULL sorgt dafür, dass in das indizierte Feld ein Wert eingegeben werden muss, d. h. Nullwerte sind unzulässig.

Einmal angenommen, Sie verfügen über eine Tabelle mit Namen "Cars" mit Feldern, in denen Sie den Namen, das Baujahr, den Preis und den Zustand von Gebrauchtwagen speichern, deren Kauf Sie in Betracht ziehen. Nehmen wir darüber hinaus an, dass die Tabelle recht umfangreich geworden ist und dass Sie das Feld mit dem Baujahr häufig in Abfragen verwenden. Sie können nun mit dem folgenden Verfahren einen Index für das Feld "Year" erstellen, damit die Abfrageergebnisse schneller zurückgegeben werden:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Clientabfragen auf Abfrageentwurf.

  2. Schließen Sie das Dialogfeld Tabelle anzeigen.

  3. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.

    Der Entwurfsbereich wird ausgeblendet und die Objektregisterkarte SQL-Ansicht angezeigt.

  4. Geben Sie die folgende SQL-Anweisung ein:

    CREATE INDEX YearIndex ON Cars (Year)

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

Seitenanfang

Erstellen einer Einschränkung oder einer Beziehung

Mit einer Einschränkung wird eine logische Bedingung festgelegt, der ein Feld oder eine Kombination aus Felder entsprechen muss, wenn Werte eingefügt werden. Beispielsweise verhindert die Einschränkung UNIQUE, dass in das mit der Einschränkung versehene Feld ein Wert eingegeben wird, der bereits vorhanden ist, sodass keine Duplikate möglich sind.

Eine Beziehung ist ein Einschränkungstyp, der auf die Werte eines Felds oder einer Kombination aus Feldern in einer anderen Tabelle verweist, um zu ermitteln, ob ein Wert in das eingeschränkte Feld bzw. die Feldkombination eingegeben werden kann. Sie verwenden kein spezielles Schlüsselwort, um anzugeben, dass eine Einschränkung eine Beziehung ist.

Verwenden Sie zum Erstellen einer Einschränkung 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 weitere zum Erstellen einer Einschränkung für mehrere Felder.

Einschränkungen für einzelne Felder

Eine CONSTRAINT-Klausel für ein einzelnes Feld folgt unmittelbar auf die Definition des Felds, das hiermit eingeschränkt wird, 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}]}

Einmal angenommen, Sie verfügen über eine Tabelle mit Namen "Cars" mit Felder, in denen Sie den Namen, das Baujahr, den Preis und den Zustand von Gebrauchtwagen speichern, deren Kauf Sie in Betracht ziehen. Nehmen wir weiter an, dass Sie häufig vergessen, einen Wert für den Zustand des Wagens einzugeben, diese Angabe aber immer aufgezeichnet werden soll. Sie können nun eine Einschränkung für das Feld "Condition" erstellen, die verhindert, dass das Feld leer bleibt. Gehen Sie hierzu wie folgt vor:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Clientabfragen auf Abfrageentwurf.

  2. Schließen Sie das Dialogfeld Tabelle anzeigen.

  3. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.

    Der Entwurfsbereich wird ausgeblendet und die Objektregisterkarte SQL-Ansicht angezeigt.

  4. Geben Sie die folgende SQL-Anweisung ein:

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL

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

Nach einer Weile stellen Sie fest, dass es im Feld Condition sehr viele ähnliche Werte gibt, die identisch sein sollten. Beispielsweise ist für einige Autos in Condition der Wert Mangelhaft und für andere der Wert Schlecht gespeichert.

Hinweis : Wenn Sie die weiteren Schrittfolgen ausführen möchten, müssen Sie der Tabelle Cars, die Sie in den vorherigen Schritten erstellt haben, einige Beispieldaten hinzufügen.

Nachdem Sie die Werte so bereinigt haben, dass sie konsistenter sind, könnten Sie unter dem Namen CarCondition eine Tabelle mit einem Feld mit dem Namen Condition erstellen, das alle Werte enthält, die Sie für die Beschreibung des Zustands von Autos verwenden möchten:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Clientabfragen auf Abfrageentwurf.

  2. Schließen Sie das Dialogfeld Tabelle anzeigen.

  3. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.

    Der Entwurfsbereich wird ausgeblendet und die Objektregisterkarte SQL-Ansicht angezeigt.

  4. Geben Sie die folgende SQL-Anweisung ein:

    CREATE TABLE CarCondition (Condition TEXT(10))

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

  6. 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

  7. Geben Sie zum Einfügen der Werte aus dem Feld "Condition" der Tabelle "Cars" in die neue Tabelle "CarCondition" die folgende SQL-Anweisung auf der Objektregisterkarte "SQL-Ansicht" 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 wird eine Anfügeabfrage mit einem Semikolon abgeschlossen.

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

Erstellen einer Beziehung mithilfe einer Einschränkung

Damit alle neuen Werte, die in das Feld "Condition" der Tabelle "Cars" eingegeben werden, einem Wert des Felds "Condition" in der Tabelle "CarCondition" entsprechen, können Sie nun eine Beziehung zwischen dem Feld "Condition" in den Tabellen "CarCondition" und "Cars" erstellen. Gehen Sie hierzu wie folgt vor:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Clientabfragen auf Abfrageentwurf.

  2. Schließen Sie das Dialogfeld Tabelle anzeigen.

  3. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.

    Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte "SQL-Ansicht" wird angezeigt.

  4. Geben Sie die folgende SQL-Anweisung ein:

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)

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

Einschränkungen für mehrere Felder

Eine CONSTRAINT-Klausel, die sich auf mehrere Felder bezieht, 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}]}

Lassen Sie uns ein weiteres Beispiel in Verbindung mit der Tabelle Cars betrachten. Einmal angenommen, Sie möchten sicherstellen, dass es in der Tabelle Cars keine Datensätze gibt, die denselben Wertesatz für Name, Year, Condition und Price haben. In diesem Fall können Sie mit der folgenden Vorgehensweise eine UNIQUE-Einschränkung erstellen, die für diese Felder gilt:

  1. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Clientabfragen auf Abfrageentwurf.

  2. Schließen Sie das Dialogfeld Tabelle anzeigen.

  3. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Abfragetyp auf Datendefinition.

    Der Entwurfsbereich wird ausgeblendet, und die Objektregisterkarte SQL-Ansicht angezeigt.

  4. Geben Sie die folgende SQL-Anweisung ein:

    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (name, year, condition, price)

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

Seitenanfang

Teilen Facebook Facebook Twitter Twitter E-Mail E-Mail

War diese Information hilfreich?

Sehr gut. Noch anderes Feedback?

Was können wir verbessern?

Vielen Dank für Ihr Feedback!

×