Share via


CREATE TABLE – SQL-Befehl

Erstellt eine Tabelle mit den angegebenen Feldern.

CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]   
(FieldName1FieldType [(nFieldWidth [, nPrecision])]      
[NULL | NOT NULL]       [CHECK lExpression1 [ERROR cMessageText1]]      
[DEFAULT eExpression1]      [PRIMARY KEY | UNIQUE]      
[REFERENCES TableName2 [TAG TagName1]]      [NOCPTRANS]   
[, FieldName2 ...]      [, PRIMARY KEY eExpression2 TAG TagName2      
|, UNIQUE eExpression3 TAG TagName3]      
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]         REFERENCES TableName3 [TAG TagName5]]      
[, CHECK lExpression2 [ERROR cMessageText2]])| FROM ARRAY ArrayName

Parameter

  • TableName1
    Gibt den Namen der zu erstellenden Tabelle an. Die Optinen TABLE und DBF sind identisch.

  • NAME LongTableName
    Gibt einen langen Namen für die Tabelle an. Einen langen Tabellennamen können Sie nur angeben, wenn eine Datenbank geöffnet ist, da lange Tabellennamen in Datenbanken gespeichert werden.

    Lange Namen können aus bis zu 128 Zeichen bestehen und in Datenbanken anstelle der kurzen Dateinamen verwendet werden.

  • FREE
    Gibt an, dass die Tabelle keiner offenen Datenbank hinzugefügt werden soll. FREE ist nicht erforderlich, wenn keine Datenbank geöffnet ist.

  • (FieldName1 FieldType [(nFieldWidth [, nPrecision])]
    Gibt den Feldnamen, den Feldtyp, die Feldbreite und die Genauigkeit der Feldwerte (Anzahl der Dezimalstellen) an.

    Eine einzelne Tabelle kann bis zu 255 Felder enthalten. Wenn eines oder mehrere der Felder NULL-WertNULL-Werte zulassen, reduziert sich diese Anzahl um 1 auf 254 Felder.

    FieldType gibt in Form eines einzelnen Buchstabens den Datentyp des Feldes an. Bei einigen Felddatentypen müssen Sie nFieldWidth oder nPrecision oder beides angeben.

    Die folgende Tabelle gibt die möglichen Werte für FieldType an. Außerdem geht aus der Tabelle hervor, ob nFieldWidth und nPrecision angegeben werden müssen.

    FieldType nFieldWidth nPrecision Beschreibung
    C n Zeichenfeld der Breite n
    D Datum
    T DatumZeit
    N n d Numerisches Feld der Breite n mit d Dezimalstellen
    F n d Gleitkomma-Feld der Breite n mit d Dezimalstellen
    I Integer (Ganzzahl)
    B D Double
    Y Währung
    L Logisch
    M Memo
    G Objektfeld

    Für die Typen D, T, I, Y, L, M, G und P werden nFieldWidth und nPrecision ignoriert. Für die Feldtypen N und F gilt für nPrecision standardmäßig der Wert 0 (keine Dezimalstellen), wenn Sie nPrecision nicht angeben. Wird für den Feldtyp B nPrecision nicht angegeben, so wird der mittels SET DECIMAL eingestellte Wert verwendet.

  • NULL
    Gibt an, dass das Feld NULL-Werte enthalten kann. Wenn eines oder mehrere der Felder NULL-Werte enthalten können, reduziert sich die maximale Anzahl möglicher Felder in einer Tabelle um 1 von 255 auf 254.

  • NOT NULL
    Gibt an, dass das Feld keine NULL-Werte enthalten darf.

    Wenn Sie weder NULL noch NOT NULL angeben, bestimmt die aktuelle Einstellung von SET NULL, ob im Feld NULL-Werte zulässig sind. Wenn NULL und NOT NULL fehlen und Sie die PRIMARY KEY- oder UNIQUE-Klausel angeben, wird dagegen die aktuelle Einstellung von SET NULL ignoriert, und der Standardwert NOT NULL wird für das Feld verwendet.

  • CHECK lExpression1
    Gibt eine Gültigkeitsregel für das Feld an. lExpression1 kann eine benutzerdefinierte Funktion sein. Beachten Sie bitte, dass beim Anfügen eines leeren Datensatzes geprüft wird, ob die Gültigkeitsregel erfüllt ist. Ein Fehler wird angezeigt, wenn die Gültigkeitsregel in den Feldern eines angefügten Datensatzes keine Leerwerte zulässt.

  • ERROR cMessageText1
    Gibt die Fehlermeldung an, die Visual FoxPro anzeigt, wenn die mittels CHECK vorgegebene Gültigkeitsregel für das Feld verletzt und ein Fehler generiert wird. Die Meldung wird nur angezeigt, wenn Daten in einem Datenblatt- oder Bearbeitungsfenster bearbeitet werden.

  • DEFAULT eExpression1
    Gibt einen Standardwert für das Feld an. Der Datentyp von eExpression1 muss mit dem Datentyp des Feldes identisch sein.

  • PRIMARY KEY
    Erstellt einen Primärindex für das Feld. Der Primärindexname hat denselben Namen wie das Feld.

  • UNIQUE
    Erstellt einen potenziellen Index für das Feld. Der potenzielle Indexname hat denselben Namen wie das Feld. Weitere Informationen zu potenziellen Indizes finden Sie unter Festlegen eines primären oder potenziellen Indexes.

    Anmerkung   Potenzielle Indizes, die durch Angabe der UNIQUE-Option im CREATE TABLE-Befehl oder ALTER TABLE – SQL erstellt wurden, sind nicht mit den Indizes identisch, die mit der UNIQUE-Option des INDEX-Befehls erstellt wurden. Bei einem Index, der mit der UNIQUE-Option des INDEX-Befehls erstellt wurde, sind doppelt vorhandene Indexschlüssel zulässig; bei potenziellen Indizes sind doppelt vorhandene Indexschlüssel nicht zulässig. Weitere Informationen zur UNIQUE-Option finden Sie unter INDEX.

    NULL-Werte und doppelt vorhandene Datensätze sind in einem Feld, das als Primärindex oder als potenzieller Index verwendet wird, nicht zulässig. Trotzdem generiert Visual FoxPro keinen Fehler, wenn Sie einen Primärindex oder einen potenziellen Index für ein Feld erstellen, das NULL-Werte unterstützt. Visual FoxPro generiert erst dann einen Fehler, wenn Sie versuchen, einen NULL-Wert oder einen bereits vorhandenen Wert in ein Feld einzugeben, das als Primärindex oder als potenzieller Index verwendet wird.

  • REFERENCES TableName2 [TAG TagName1]
    Gibt die Master-Tabelle (übergeordnete Tabelle) an, zu der eine persistente Beziehung hergestellt wird. Wenn Sie TAG TagName1 nicht angeben, wird die Beziehung mit Hilfe des Primärindexes der Master-Tabelle hergestellt. Wenn die Master-Tabelle keinen Primärindex hat, generiert Visual FoxPro einen Fehler.

    Geben Sie TAG TagName1 an, um eine Beziehung herzustellen, die auf einem vorhandenen Indexnamen der übergeordneten Tabelle basiert. Indexnamen können aus bis zu 10 Zeichen bestehen.

    Die Master-Tabelle darf keine freie Tabelle sein.

  • NOCPTRANS
    Unterbindet die Umsetzung von Zeichen- und Memofeldern in eine andere Codepage. Wird die Tabelle in eine andere Codepage konvertiert, bleiben die Felder, für die Sie NOCPTRANS angegeben haben, von der Umsetzung ausgenommen. NOCPTRANS kann nur für Zeichen- und Memofelder angegeben werden. Dadurch wird erstellt, was im Tabellen-Designer als Datentyp Zeichen (binär) und Memo (binär) angezeigt wird.

    Im folgenden Beispiel wird eine Tabelle mit dem Namen TABELLE1 erstellt, die zwei Zeichen- und zwei Memofelder enthält. Für das zweite Zeichenfeld, CHAR2, und das zweite Memofeld, MEMO2, wurde NOCPTRANS angegeben, um die Umsetzung zu unterbinden.

    CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
       memo1 M, memo2 M NOCPTRANS)
    
  • PRIMARY KEY eExpression2 TAG TagName2
    Gibt einen zu erstellenden Primärindex an. eExpression2 gibt ** ein beliebiges Feld oder eine beliebige Kombination von Feldern der Tabelle an. TAG TagName2 gibt den Namen des zu erstellenden Primärindexnamens an. Indexnamen können aus bis zu 10 Zeichen bestehen.

    Da eine Tabelle immer nur einen Primärindex haben kann, dürfen Sie diese Klausel nicht angeben, wenn Sie bereits einen Primärindex für ein Feld erstellt haben. Visual FoxPro generiert einen Fehler, wenn Sie mehr als eine PRIMARY KEY-Klausel in einem CREATE TABLE-Befehl angeben.

  • UNIQUE eExpression3 TAG TagName3
    Erstellt einen potenziellen Index. eExpression3 gibt ein beliebiges Feld oder eine beliebige Kombination von Feldern der Tabelle an. Wenn Sie jedoch bereits einen Primärindex mit einer der PRIMARY KEY-Klauseln erstellt haben, dürfen Sie das Feld, das für den Primärindex angegeben wurde, hier nicht erneut angeben. TAG TagName3 gibt einen Namen für den zu erstellenden potenziellen Indexnamen an. Indexnamen können aus bis zu 10 Zeichen bestehen.

    Eine Tabelle kann mehrere potenzielle Indizes haben.

  • FOREIGN KEY eExpression4 TAG TagName4 [NODUP]
    Erstellt einen Fremdindex (keinen Primärindex) und stellt eine Beziehung zu einer Master-Tabelle her. eExpression4 gibt den Fremdindexausdruck und TagName4 den Namen des zu erstellenden Fremdindexes an. Indexnamen können aus bis zu 10 Zeichen bestehen. Geben Sie NODUP an, um einen Fremdindex zu erstellen, der ein potenzieller Index ist.

    Sie können für die Tabelle mehrere Fremdindizes erstellen, aber in den Fremdindexausdrücken müssen unterschiedliche Felder der Tabelle angegeben werden.

  • REFERENCES TableName3 [TAG TagName5]
    Gibt die Master-Tabelle (übergeordnete Tabelle) an, zu der eine persistente Beziehung hergestellt wird. Geben Sie TAG TagName5 an, um eine Beziehung herzustellen, die auf einem Indexnamen der Master-Tabelle basiert. Indexnamen können aus bis zu 10 Zeichen bestehen. Wenn Sie TAG TagName5 nicht angeben, wird die Beziehung standardmäßig mit Hilfe des Primärindexes der Master-Tabelle hergestellt.

  • CHECK eExpression2 [ERROR cMessageText2]
    Gibt die Gültigkeitsregel für die Tabelle an. ERROR cMessageText2 gibt die Fehlermeldung an, die Visual FoxPro anzeigt, wenn die Gültigkeitsregel der Tabelle verletzt wird. Die Meldung wird nur angezeigt, wenn Daten in einem Datenblatt- oder Bearbeitungsfenster bearbeitet werden.

  • FROM ARRAY ArrayName
    Gibt den Namen eines vorhandenen Arrays an, dessen Inhalt der Name, der Typ, die Feldbreite und die Anzahl der Dezimalstellen der einzelnen Felder der Tabelle ist. Der Inhalt des Arrays kann mit Hilfe der AFIELDS( )-Funktion definiert werden.

Hinweise

Die neue Tabelle wird in dem Arbeitsbereich mit der niedrigsten verfügbaren Nummer geöffnet, und der Zugriff auf die Tabelle kann über ihren Alias erfolgen. Die neue Tabelle wird immer zur exklusiven Verwendung geöffnet, unabhängig von der aktuellen Einstellung von SET EXCLUSIVE.

Wenn eine Datenbank geöffnet ist und Sie die FREE-Klausel nicht angeben, wird die neue Tabelle zur Datenbank hinzugefügt. Sie können keine neue Tabelle mit demselben Namen wie eine Tabelle in der Datenbank erstellen.

Wenn beim Erstellen der neuen Tabelle keine Datenbank geöffnet ist und Sie die NAME-, CHECK-, DEFAULT-, FOREIGN KEY-, PRIMARY KEY- oder REFERENCES-Klausel angeben, wird ein Fehler generiert.

Beachten Sie, dass in der CREATE TABLE-Syntax bestimmte CREATE TABLE-Optionen durch Kommas getrennt sind. Außerdem ist zu beachten, dass NULL-, NOT NULL-, CHECK-, DEFAULT-, PRIMARY KEY- und UNIQUE-Klauseln innerhalb der Klammern stehen müssen, die die Spaltendefinitionen umschließen.

Beispiel

Im folgenden Beispiel wird eine neue Datenbank mit dem Namen Mydata1 erstellt. Mit CREATE TABLE werden drei Tabellen (Salesman, Customer und Orders) erstellt. Die FOREIGN KEY- und REFERENCES-Klauseln im zweiten CREATE TABLE-Befehl erstellen eine persistente 1:n-Beziehung zwischen den Tabellen Salesman und Customer. Die DEFAULT-Klauseln im dritten CREATE TABLE-Befehl definieren Standardwerte, und die CHECK- und ERROR-Klauseln definieren Geschäftsregeln für die Dateneingabe in bestimmte Felder. Mittels MODIFY DATABASE werden die Beziehungen zwischen den drei Tabellen angezeigt.

CLOSE DATABASES
CLEAR

* Create mydata database in the current directory or folder
CREATE DATABASE mydata1

* Create a salesman table with a primary key
CREATE TABLE salesman ;
   (SalesID c(6) PRIMARY KEY, ;
   SaleName C(20))

* Create a customer table and relate it to the salesman table.
CREATE TABLE customer ;
   (SalesID c(6), ;
   CustId i PRIMARY KEY, ;
   CustName c(20) UNIQUE,   ;
   SalesBranch c(3), ;
   FOREIGN KEY SalesId TAG SalesId REFERENCES salesman)

* Create an orders table related to customer with its own primary
* key and some business rules such as defaults & checks.
CREATE TABLE orders ;
   (OrderId i PRIMARY KEY, ;
      CustId i REFERENCES customer TAG CustId, ;
      OrderAmt y(4), ;
      OrderQty i ;
      DEFAULT 10 ;
      CHECK (OrderQty > 9) ;
      ERROR "Order Quantity must be at least 10", ;
         DiscPercent n(6,2) NULL ;
      DEFAULT .NULL., ;
      CHECK (OrderAmt > 0) ERROR "Order Amount Must be > 0" )

* Display new database, tables, and relationships
MODIFY DATABASE

* Delete example files
SET SAFETY OFF && To suppress verification message
CLOSE DATABASES     && Close database before deleting
DELETE DATABASE mydata1 DELETETABLES

Siehe auch

AFIELDS( ) | ALTER TABLE – SQL | CREATE | CREATE QUERY | INSERT – SQL | MODIFY QUERY | MODIFY STRUCTURE | OPEN DATABASE | SELECT – SQL | SET NOCPTRANS | SQL-Befehle - Überblick