Erstellt eine neue Tabelle.
CREATE TABLE [ IF NOT EXISTS ] table-name ( { column-definition | table-constraint| sync-constraint }, ... )
column-definition : column-name data-type [ [ NOT ] NULL ] [ DEFAULT column-default] [STORE AS FILE (file-name-column) [CASCADE DELETE ] [ column-constraint ]
column-default : AUTOFILENAME(prefix,extension) | GLOBAL AUTOINCREMENT [ ( number ) ] | AUTOINCREMENT | CURRENT DATE | CURRENT TIME | CURRENT TIMESTAMP | CURRENT UTC TIMESTAMP | NULL | NEWID( ) | constant-value
file-name "filename"
column-constraint : PRIMARY KEY | UNIQUE
table-constraint : { [ CONSTRAINT constraint-name ] pkey-constraint | fkey-constraint | unique-key-constraint } [ WITH MAX HASH SIZE integer ]
pkey-constraint :
PRIMARY KEY [ ordered-column-list ]
fkey-constraint : [ NOT NULL ] FOREIGN KEY [ role-name ] ( ordered-column-list ) REFERENCES table-name ( column-name, ... ) [ CHECK ON COMMIT ]
unique-key-constraint : UNIQUE ( ordered-column-list )
ordered-column-list : ( column-name [ ASC | DESC ], ... )
sync-constraint :SYNCHRONIZE {ON| OFF| ALL| DOWNLOAD}
IF NOT EXISTS-Klausel Mit dieser Klausel erstellen Sie eine Tabelle. Existiert die angegebene Tabelle bereits, werden keine Änderungen durchgeführt und keine Fehlermeldung ausgegben.
column-definition Legt eine Spalte in einer Tabelle fest. Für diese Klausel sind folgende Parameter verfügbar:
column-name Der Spaltenname ist ein Bezeichner. Mehrere Spalten in derselben Tabelle können nicht denselben Namen haben. Siehe Bezeichner in UltraLite.
UltraLite Java Edition-Datenbanken unterstützen die Partitionierung von Datenbankdateien, sodass externe Dateien jetzt verwendet werden können, um große BLOB-Werte zu speichern, wobei die Dateien in zwei Spalten referenziert werden: Die erste speichert den Dateinamen und muss über den Datentyp CHAR(Größe)... AUTOFILENAME(...) verfügen, die zweite wird verwendet, um auf den Inhalt der Datei zuzugreifen. Sie ist als Datentyp LONG BINARY STORE AS… definiert. Die Spalte mit dem Dateiinhalt ist schreibgeschützt.
data-type Der Datentyp der Spalte. Siehe UltraLite, SQLDatentypen.
[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.
column-default 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:
AUTOFILENAME Diese Klausel unterstützt das Speichern von externen BLOB-Dateien in einer partitionierten UltraLite Java Edition-Datenbank.
Beim Partitionieren der Datenbank muss die Spalte, die zum Speichern der Dateinamen bestimmt ist, die AUTOFILENAME(Präfix,Erweiterung)-Klausel enthalten. Diese Klausel gibt an, wie neue Dateinamen für eingelesene BLOB-Werte generiert werden sollen. Die Werte für Präfix und Erweiterung sind Zeichenliteral-Konstanten. Siehe Connection.OPTION_BLOB_FILE_BASE_DIR-Variable [BlackBerry] [UltraLiteJ].
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.
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.
Wenn die Spalte vom Typ BIGINT oder UNSIGNED BIGINT ist, beträgt die Standard-Partitionsgröße 2^32 = 4294967296. Bei Spalten aller anderen Typen ist der Standardwert 2^16 = 65536. Da diese Standardwerte nicht immer sinnvoll sind, vor allem wenn die Spalte nicht vom Typ INT oder BIGINT ist, empfiehlt es sich, die Partitionsgröße explizit festzulegen.
Siehe GLOBAL AUTOINCREMENT-Spalten in UltraLite deklarieren und UltraLite-Option global_database_id.
[NOT] NULL Steuert, ob die Spalte NULL-Werte enthalten kann.
NEWID() Eine Funktion, die einen eindeutigen bezeichnenden Wert generiert. Siehe 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. Siehe CURRENT TIMESTAMP-Spezialwert.
| CURRENT UTC TIMESTAMP Ein TIMESTAMP WITH TIMEZONE Wert, der die Coordinated Universal Time (UTC) mit Jahr, Monat, Tag, Stunde, Minute, Sekunde, Sekundenbruchteil und Zeitzone enthält. Der Sekundenbruchteil wird mit 3 Dezimalstellen gespeichert. Die Genauigkeit ist durch die Genauigkeit der Systemuhr begrenzt. Siehe CURRENT UTC TIMESTAMP-Spezialwert.
CURRENT DATE Speichert das aktuelle Jahr sowie den aktuellen Monat und Tag. Siehe CURRENT DATE-Spezialwert.
CURRENT TIME Speichert die aktuelle Stunde, Minute, Sekunde und Sekundenbruchteile. Siehe CURRENT TIME-Spezialwert.
Konstantenwert Eine Konstante für den Datentyp der Spalte. Die Konstante ist gewöhnlich eine Zahl oder eine Zeichenfolge.
STORE AS FILE (file-name-column) [CASCADE DELETE] Nur von UltraLite Java Edition-Datenbanken unterstützt.
Legen Sie fest, dass eine LONG BINARY-Spalte extern gespeichert werden soll (Partitionierung der Datenbank) und legen Sie file-name-column fest, um die Spalte zu benennen, die verwendet wird, um die Dateinamen der extern gespeicherte BLOB-Werte aufzunehmen. Eine Spalte mit dieser Klausel muss vom Typ LONG BINARY sein und verhält sich wie eine schreibgeschützte Spalte.
column-constraint-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 column-constraint 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 role-name an, um den Fremdschlüssel zu benennen. role-name wird verwendet, um Fremdschlüssel in derselben Tabelle voneinander zu unterscheiden. Alternativ dazu können Sie den Fremdschlüssel mit CONSTRAINT constraint-name 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 column-name, 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 Nicht unterstützt von UltraLite Java Edition-Datenbanken. 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, sofern 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 Lesen der Datenbankeigenschaften. Siehe auch UltraLite-Erstellungsparameter max_hash_size.
Synchronisations-Integritätsregel-Klausel Geben Sie eine Synchronisations-Integritätsregel an, um zu ermitteln, ob eine Tabelle synchronisiert werden kann oder nicht, und ob alle Upload-Zeilen vorhanden sind, nur Änderungen in der Tabelle übertragen werden, oder keine Änderungen in der Tabelle übertragen werden.
SYNCHRONIZE ON Standardeinstellung: Die Tabelle kann synchronisiert werden und nur die Änderungen in der Tabelle werden im Upload übertragen.
SYNCHRONIZE OFF Die Tabelle kann nicht synchronisiert werden, und es wird ein Fehler gemeldet, wenn die Tabelle in eine Publikation aufgenommen wird.
SYNCHRONIZE ALL Die Tabelle kann synchronisiert werden und alle Zeilen in der Tabelle werden im Upload übertragen. Diese Integritätsregel wird von UltraLite Java Edition-Datenbanken nicht unterstützt.
SYNCHRONIZE DOWNLOAD Die Tabelle kann mit Änderungen in der konsolidierten Datenbank synchronisiert werden, jedoch werden lokale Änderungen im Upload übertragen.
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:
Wenn es keinen Fremdschlüssel mit einem Rollennamen gibt, der genauso lautet wie der Tabellenname, wird der Tabellenname als Rollenname zugeordnet.
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. Siehe UltraLite-Datenbankschemas.
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). Siehe ULBulkCopy.Dispose-Methode [UltraLite.NET].
Synchronisation von externen BLOB-Spalten (nur UltraLiteJ) In der konsolidierten Datenbank wird die Dateinamensspalte als reguläre CHAR-Spalte und die BLOB-Dateispalte als reguläre BLOB (LONG BINARY)-Spalte gespeichert. Bei einem Download wird die Dateinamensspalte ignoriert. Es wird ein neuer Dateiname anhand der Datenbankoption (Connection.OPTION_BLOB_FILE_BASE_DIR), des Präfixes und der in der DEFAULT AUTOFILENAME-Klausel angegeben Erweiterungszeichenfolgen generiert. Für J2SE verwendet der in der Spalte mit dem Dateinamen gespeicherte Wert die Syntax <Datenbankoption-Blobdatei-Basisverzeichnis><Präfix><Autogenerierter_Ganzzahlwert>.<Erweiterung> und für BlackBerry verwendet der gespeicherte Wert die Syntax <Präfix><Autogenerierter_Ganzzahlwert>.<Erweiterung>. Aus diesem Grund sind für BlackBerry generierte Dateinamen immer relativ.
Zugriff auf externe BLOB-Spalten (nur UltraLiteJ) Dateien mit externen BLOB-Werten werden nur geöffnet, wenn die Clientanwendung versucht, die Spalte mit den Werten zu lesen. Zu diesem Zeitpunkt muss der Dateiname, der in der durch die STORE AS FILE-Klausel bezeichneten Spalte gespeichert ist, ein gültiger Dateiname sein. Für den BlackBerry werden relative Dateinamen anhand der Datenbankoption OPTION_BLOB_FILE_BASE_DIR aufgelöst. Wenn UltraLite ermittelt, dass ein Dateiname nicht mit dem Präfix "file://" beginnt, wird dem Dateinamen der in der OPTION_BLOB_FILE_BASE_DIR-Option enthaltene Wert vorangestellt, bevor versucht wird, die Datei zu öffnen.
Eine BLOB-Datei wird in die Datenbank eingefügt, indem ein Dateiname für die file-name-column-Spalte festgelegt wird. Der eingefügt Dateiname muss ein gültiger Dateiname sein und bei Blackberry das Format für einen vollqualifizierten, absoluten Pfaddateinamen gemäß der Beschreibung im Datei-URL-Format in IETF RFCs 1738 & 2396 einhalten (siehe Paketbeschreibung javax.microedition.io.file, in der BlackBerry JDE API-Dokumentation). Beim Einfügen kann ein Wert für die STORE AS FILE-Spalte nicht angegeben werden.
Sobald eine Datei in die Datenbank eingefügt wurde, übernimmt die Datenbank die vollständige Kontrolle über die Datei und geht davon aus, dass außerhalb keine Änderungen vorgenommen werden.
Automatisches Festschreiben (Autocommit).
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 ) |
Die folgende Anweisung erstellt eine Tabelle für eine Bibliotheksdatenbank zur Aufnahme von Angaben über ausgeliehene Bücher. 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) ) |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |