Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » UltraLite - Datenbankverwaltung » UltraLite-SQL-Referenz » UltraLite-SQL-Anweisungen

 

UltraLite CREATE TABLE-Anweisung

Mit dieser Anweisung erstellen Sie eine Tabelle.

Syntax
CREATE TABLE Tabellenname(
 { Spaltendefinition | Tabellenintegritätsregel }, ... )
Spaltendefinition :
Spaltenname Datentyp
[ [ NOT ] NULL ] 
[ DEFAULT Spaltenstandardwert ] 
[ Spaltenintegritätsregel ]
Spaltenstandardwert :
GLOBAL AUTOINCREMENT [ ( Zahl ) ] 
| AUTOINCREMENT 
| CURRENT DATE 
| CURRENT TIME 
| CURRENT TIMESTAMP
| NULL 
| NEWID( )
| Konstantenwert
Spaltenintegritätsregel :
PRIMARY KEY
| UNIQUE
Tabellenintegritätsregel :
{ [ CONSTRAINT Integritätsregelname ] 
Primärschlüssel-Integritätsregel | Fremdschlüssel-Integritätsregel 
 |  Eindeutigkeitsschlüsselintegritätsregel } 
[ WITH MAX HASH SIZE Ganzzahl ]
Primärschlüssel-Integritätsregel : PRIMARY KEY [ sortierte_Spaltenliste  ]
Fremdschlüssel-Integritätsregel :
[ NOT NULL ] FOREIGN KEY [ Rollenname ]  ( sortierte_Spaltenliste) 
REFERENCES Tabellenname ( Spaltenname, … ) 
[ CHECK ON COMMIT ] 
Eindeutigkeitsschlüsselintegritätsregel :
 UNIQUE( sortierte_Spaltenliste )
 sortierte_Spaltenliste :
( Spaltenname [ ASC | DESC ], ... )
Parameter

Spaltendefinition   Legt eine Spalte in einer Tabelle fest. Für diese Klausel sind folgende Parameter verfügbar:

  • Spaltenname   Der Spaltenname ist ein Bezeichner. Mehrere Spalten in derselben Tabelle können nicht denselben Namen haben. Weitere Hinweise finden Sie unter Bezeichner in UltraLite.

  • Datentyp   Der Datentyp der Spalte. Weitere Hinweise finden Sie unter Datentypen in UltraLite.

  • [NOT] NULL   Wenn NOT NULL angegeben ist, oder wenn die Spalte in einer UNIQUE- oder PRIMARY KEY-Integritätsregel vorkommt, kann die Spalte in keiner Zeile NULL enthalten. Andernfalls ist NULL erlaubt.

  • Spaltenstandardwert   Setzt den Standardwert für die Spalte. Wenn ein DEFAULT-Wert angegeben ist, wird er als Wert für die Spalte in jeder INSERT-Anweisung benutzt, die für diese Spalte keinen Wert angibt. Wenn DEFAULT nicht angegeben wird, entspricht er DEFAULT NULL. Folgende Standardoptionen sind verfügbar:

    • AUTOINCREMENT   Wenn AUTOINCREMENT verwendet wird, muss die Spalte einer der Ganzzahl-Datentypen oder ein nummerisch exakter Typ sein. Ist beim Einfügen in die Tabelle kein Wert für die autoincrement-Spalte vorgegeben, wird ein eindeutiger Wert erstellt, der größer ist als alle Werte in der Spalte. Wenn eine INSERT-Anweisung einen Wert für die Spalte festlegt, der größer als der aktuelle Maximalwert für die Spalte ist, wird dieser Wert als Startpunkt für nachfolgende Einfügungen verwendet.

      Tipp

      In UltraLite wird der autoincrement-Wert nicht auf 0 gesetzt, wenn die Tabelle erstellt wird, und AUTOINCREMENT generiert negative Zahlen, wenn ein Datentyp mit Vorzeichen für die Spalte verwendet wird. Sie sollten daher AUTOINCREMENT-Spalten als Integer-Datentyp ohne Vorzeichen deklarieren, um die Verwendung negativer Werte zu verhindern.

    • GLOBAL AUTOINCREMENT   Ähnlich wie AUTOINCREMENT, mit dem Unterschied, dass die Domäne partitioniert ist. Jede Teilmenge enthält dieselbe Anzahl von Werten. Sie ordnen jeder Kopie der Datenbank eine eindeutige Datenbank-Identifizierungsnummer zu. UltraLite liefert Standardwerte in einer Datenbank nur von der Teildomäne, die eindeutig durch diese Datenbanknummer gekennzeichnet ist. Weitere Hinweise finden Sie unter GLOBAL AUTOINCREMENT in UltraLite verwenden und UltraLite global_database_id-Option.

    • [NOT] NULL   Steuert, ob die Spalte NULL-Werte enthalten kann.

    • NEWID()   Eine Funktion, die einen eindeutigen bezeichnenden Wert generiert. Weitere Hinweise finden Sie unter NEWID-Funktion [Verschiedene].

    • CURRENT TIMESTAMP   Kombiniert CURRENT DATE und CURRENT TIME zu einem TIMESTAMP-Wert, der Jahr, Monat, Tag, Stunde, Minute, Sekunde und Sekundenbruchteile enthält. Der Sekundenbruchteil wird mit 3 Dezimalstellen gespeichert. Die Genauigkeit ist durch die Genauigkeit der Systemuhr begrenzt. Weitere Hinweise finden Sie unter CURRENT TIMESTAMP-Spezialwert.

    • CURRENT DATE   Speichert das aktuelle Jahr sowie den aktuellen Monat und Tag. Weitere Hinweise finden Sie unter CURRENT DATE-Spezialwert.

    • CURRENT TIME   Speichert die aktuelle Stunde, Minute, Sekunde und Sekundenbruchteile. Weitere Hinweise finden Sie unter CURRENT TIME-Spezialwert.

    • Konstantenwert   Eine Konstante für den Datentyp der Spalte. Die Konstante ist gewöhnlich eine Zahl oder eine Zeichenfolge.

  • Spaltenintegritätsregel-Klausel   Geben Sie eine Spaltenintegritätsregel an, um die in einer Spalte zulässigen Werte einzuschränken. Eine Spaltenintegritätsregel kann Folgendes sein:

    • PRIMARY KEY   Wenn sie Teil einer Spaltenintegritätsregel ist, legt die PRIMARY KEY-Klausel die Spalte als Primärschlüssel für die Tabelle fest. Primärschlüssel kennzeichnen eindeutig jede Zeile in einer Tabelle. Standardmäßig lassen in Primärschlüsseln aufgenommene Spalten nicht NULL zu.

    • UNIQUE   Identifiziert eine oder mehrere Spalten, die jede Zeile einer Tabelle eindeutig identifizieren. Es kann in einer Tabelle nicht mehrere Zeilen mit denselben Werten in der bzw. allen benannten Spalte(n) geben. Eine Tabelle kann mehr als eine Eindeutigkeits-Integritätsregel besitzen. NULL ist nicht zulässig.

Tabellenintegritätsregel-Klausel   Geben Sie eine Tabellenintegritätsregel an, um die Werte zu beschränken, die eine oder mehrere Spalten in der Tabelle enthalten können. Verwenden Sie die CONSTRAINT-Klausel, um einen Bezeichner für die Tabellenintegritätsregel anzugeben. Tabellenintegritätsregeln können eine Primärschlüssel-Integritätsregel, eine Fremdschlüssel-Integritätsregel oder eine Eindeutigkeitsintegritätsregel sein, wie unten beschrieben:

  • Primärschlüssel-Integritätsregel-Klausel   Legt die angegebene(n) Spalte(n) als Primärschlüssel für die Tabelle fest. Primärschlüssel kennzeichnen eindeutig jede Zeile in einer Tabelle. Spalten, die in Primärschlüsseln enthalten sind, dürfen NULL-Werte nicht zulassen.

  • Fremdschlüssel-Integritätsregel-Klausel   Geben Sie eine Fremdschlüssel-Integritätsregel an, um die Werte von einer oder mehreren Spalten zu beschränken, die mit den Werten in einem Primärschlüssel (oder einer Eindeutigkeits-Integritätsregel) einer anderen Tabelle übereinstimmen müssen.

    • NOT NULL-Klausel   Geben Sie NOT NULL an, um NULL-Werte in den Fremdschlüsselspalten nicht zuzulassen. NULL in einem Fremdschlüssel bedeutet, dass dieser Zeile in der Fremdtabelle keine Zeile in der Primärtabelle entspricht. Wenn mindestens ein Wert in einem mehrspaltigen Fremdschlüssel NULL ist, werden die Werte nicht beschränkt, die in anderen Spalten des Schlüssels enthalten sein können.

    • Rollenname-Klausel   Geben Sie einen Rollennamen an, um den Fremdschlüssel zu benennen. Rollenname wird verwendet, um Fremdschlüssel in derselben Tabelle voneinander zu unterscheiden. Alternativ dazu können Sie den Fremdschlüssel mit CONSTRAINT Integritätsregelname benennen. Verwenden Sie jedoch nicht beide Methoden zur Benennung eines Fremdschlüssels.

    • REFERENCES-Klausel   Geben Sie die REFERENCES-Klausel an, um eine oder mehrere Spalten in der Primärtabelle festzulegen, die als Fremdschlüssel-Integritätsregel verwendet werden sollen. Jeder Spaltenname, der von Ihnen in einer REFERENCES-Spaltenintegritätsregel angegeben wird, muss eine Spalte in der Primärtabelle sein, für die eine Eindeutigkeits-Integritätsregel oder Primärschlüssel-Integritätsregel gilt.

    • CHECK ON COMMIT   Geben Sie CHECK ON COMMIT an, damit der Datenbankserver auf ein COMMIT wartet, bevor er Fremdschlüssel-Integritätsregeln erzwingt. Standardmäßig werden Fremdschlüssel-Integritätsregeln während Einfügungs-, Lösch- und Aktualisierungsvorgängen sofort erzwungen. Wenn allerdings CHECK ON COMMIT gesetzt ist, können Datenbankänderungen in beliebiger Reihenfolge durchgeführt werden, auch wenn sie Fremdschlüssel-Integritätsregeln verletzen, solange inkonsistente Daten vor dem nächsten COMMIT aufgelöst werden.

  • Eindeutigkeits-Integritätsregel-Klausel   Geben Sie eine Eindeutigkeits-Integritätsregel an, um eine oder mehrere Spalten festzulegen, die jede Zeile in der Tabelle eindeutig identifizieren. Es kann in einer Tabelle nicht mehrere Zeilen mit denselben Werten in der bzw. allen benannten Spalte(n) geben. Eine Tabelle kann mehr als eine Eindeutigkeits-Integritätsregel besitzen.

  • WITH MAX HASH SIZE   Legt die Hash-Größe (in Byte) für diesen Index fest. Dieser Wert setzt den Standardwert der Eigenschaft MaxHashSize außer Kraft, der für die Datenbank gilt. Hinweise zur Standardgröße finden Sie unter Auf UltraLite-Datenbankeigenschaften zugreifen.

Bemerkungen

Normalerweise werden Spaltenintegritätsregeln verwendet, es sei denn, die Integritätsregel referenziert mehr als nur eine Spalte in der Tabelle. In diesen Fällen muss eine Tabellenintegritätsregel verwendet werden. Wenn eine Anweisung eine Verletzung einer Integritätsregel bewirkt, wird die Ausführung der Anweisung nicht abgeschlossen. Alle Änderungen, die von der Anweisung vor der Fehlererkennung durchgeführt wurden, werden zurückgesetzt und ein Fehler wird gemeldet.

Jede Zeile in der Tabelle besitzt einen eindeutigen Primärschlüsselwert.

Wenn kein Rollenname angegeben ist, wird der Rollenname wie folgt zugeordnet:

  1. Wenn es keinen Fremdschlüssel mit einem Rollennamen gibt, der genauso lautet wie der Tabellenname, wird der Tabellenname als Rollenname zugeordnet.

  2. Wenn der Tabellenname bereits vergeben ist, wird der Rollenname der Tabellenname, der aus einer für diese Tabelle eindeutigen dreistelligen und mit Nullen aufgefüllten Zahl zusammengesetzt ist.

Schemaänderungen   Anweisungen werden nicht freigegeben, wenn gleichzeitig Schemaänderungen initiiert werden. Weitere Hinweise finden Sie unter Schemaänderungen mit DDL-Anweisungen.

UltraLite verarbeitet keine Anforderungen oder Abfragen, die die Tabelle referenzieren, während die Anweisung CREATE TABLE ausgeführt wird. Außerdem ist es nicht möglich, CREATE TABLE auszuführen, wenn die Datenbank aktive Abfragen oder nicht festgeschriebene Transaktionen enthält.

Für UltraLite.NET-Benutzer: Sie können diese Anweisung nur ausführen, wenn Sie auch die Dispose-Methode für alle Datenobjekte ausführen (z.B. ULDataReader). Weitere Hinweise finden Sie unter Dispose-Methode.

Nebenwirkungen

Automatisches Festschreiben (Autocommit).

Siehe auch
Beispiel

Mit der folgenden Anweisung wird eine Tabelle für eine Bibliotheksdatenbank zur Aufnahme von Bücherdaten erstellt.

CREATE TABLE library_books (
   isbn CHAR(20)      PRIMARY KEY,
   copyright_date     DATE,
   title              CHAR(100),
   author             CHAR(50),
   location           CHAR(50),
   FOREIGN KEY location REFERENCES room
);

Mit der folgenden Anweisung wird eine Tabelle für eine Bibliotheksdatenbank zur Aufnahme von Angaben über ausgeliehene Bücher erstellt. Der Standardwert für date_borrowed zeigt an, dass das Buch an dem Tag ausgeliehen wurde, an dem der Eintrag erfolgte. Die Spalte date_returned ist NULL, bis das Buch zurückgegeben wird.

CREATE TABLE borrowed_book (
   loaner_name   CHAR(100) PRIMARY KEY,
   date_borrowed DATE NOT NULL DEFAULT CURRENT DATE,
   date_returned DATE,
   book CHAR(20)
   FOREIGN KEY book REFERENCES library_books (isbn)
);

Mit der folgenden Anweisung werden Tabellen für die Datenbank einer Verkaufsabteilung zur Aufnahme von Angaben zu Aufträgen und Auftragspositionen erstellt.

CREATE TABLE Orders (
   order_num INTEGER NOT NULL PRIMARY KEY,
   date_ordered DATE,
   name CHAR(80)
);
CREATE TABLE Order_item (
   order_num        INTEGER NOT NULL,
   item_num         SMALLINT NOT NULL,
   PRIMARY KEY (order_num, item_num),
   FOREIGN KEY (order_num)
   REFERENCES Orders (order_num)
);