INCREMENT
-Option
Mit der optionalen INCREMENT
-Klausel können Sie einen anderen Schrittwert ungleich Null als 1 angeben.
Warning
|
Der SQL-Standard gibt an, dass, wenn |
Umbenennen einer Spalte: die TO-Klausel
Ändern des Datentyps einer Spalte: die TYPE-Klausel
Ändern der Position einer Spalte: die POSITION-Klausel
Die Klauseln DROP DEFAULT und SET DEFAULT
Die Klauseln SET NOT NULL und DROP NOT NULL
Die Klauseln COMPUTED [BY] oder GENERATED ALWAYS AS
INCREMENT
-OptionMit der optionalen INCREMENT
-Klausel können Sie einen anderen Schrittwert ungleich Null als 1 angeben.
Warning
|
Der SQL-Standard gibt an, dass, wenn |
Berechnete Felder können mit der COMPUTED [BY]
- oder GENERATED ALWAYS AS
-Klausel (gemäß SQL:2003-Standard) definiert werden.Sie meinen dasselbe.Die Beschreibung des Datentyps ist für berechnete Felder nicht erforderlich (aber möglich), da das DBMS als Ergebnis der Ausdrucksanalyse den entsprechenden Typ berechnet und speichert.Entsprechende Operationen für die in einem Ausdruck enthaltenen Datentypen müssen genau angegeben werden.
Wenn der Datentyp für ein berechnetes Feld explizit angegeben wird, wird das Berechnungsergebnis in den angegebenen Typ konvertiert.Das bedeutet zum Beispiel, dass das Ergebnis eines numerischen Ausdrucks als String ausgegeben werden könnte.
In einer Abfrage, die eine COMPUTED BY
-Spalte auswählt, wird der Ausdruck für jede Zeile der ausgewählten Daten ausgewertet.
Tip
|
Anstelle einer berechneten Spalte ist es in manchen Fällen sinnvoll, eine reguläre Spalte zu verwenden, deren Wert in Triggern zum Hinzufügen und Aktualisieren von Daten ausgewertet wird.Dies kann die Leistung beim Einfügen/Aktualisieren von Datensätzen verringern, aber die Leistung der Datenauswahl erhöhen. |
Wenn die Spalte ein Array sein soll, kann der Basistyp ein beliebiger SQL-Datentyp außer BLOB
und Array sein.
Die Abmessungen des Arrays sind in eckigen Klammern angegeben.(Im Syntax block erscheinen diese Klammern in Anführungszeichen, um sie von den eckigen Klammern zu unterscheiden, die optionale Syntaxelemente kennzeichnen.)
Für jede Array-Dimension definieren eine oder zwei ganze Zahlen die untere und obere Grenze ihres Indexbereichs:
Arrays sind standardmäßig 1-basiert.Die untere Grenze ist implizit und nur die obere Grenze muss angegeben werden.Eine einzelne Zahl kleiner als 1 definiert den Bereich num..1 und eine Zahl größer als 1 definiert den Bereich 1..num.
Zwei durch einen Doppelpunkt getrennte Zahlen (‘:
’) und optionales Leerzeichen, das zweite größer als das erste, können verwendet werden, um den Bereich explizit zu definieren.Eine oder beide Grenzen können kleiner als Null sein, solange die obere Grenze größer als die untere ist.
Wenn das Array mehrere Dimensionen hat, müssen die Bereichsdefinitionen für jede Dimension durch Kommas und optionales Leerzeichen getrennt werden.
Indizes werden nur validiert, wenn tatsächlich ein Array existiert.Das bedeutet, dass keine Fehlermeldungen bezüglich ungültiger Indizes zurückgegeben werden, wenn die Auswahl eines bestimmten Elements nichts zurückgibt oder wenn ein Array-Feld [constant] NULL
ist.
Es können fünf Arten von Einschränkungen angegeben werden.Sie sind:
Primärschlüssel (PRIMARY KEY
)
Eindeutiger Schlüssel (UNIQUE
)
Fremdschlüssel (REFERENCES
)
CHECK
-Einschränkung (CHECK
)
NOT NULL
-Einschränkung (NOT NULL
)
Einschränkungen können auf Spaltenebene (“Spaltenbeschränkungen”) oder auf Tabellenebene (“Tabellenbeschränkungen”) angegeben werden.Einschränkungen auf Tabellenebene sind erforderlich, wenn Schlüssel (eindeutige Einschränkung, Primärschlüssel, Fremdschlüssel) aus mehreren Spalten bestehen und wenn eine CHECK
-Einschränkung andere Spalten in der Zeile als die definierte Spalte umfasst.Die Einschränkung NOT NULL
kann nur als Spalteneinschränkung angegeben werden.Die Syntax einiger Einschränkungstypen kann geringfügig abweichen, je nachdem, ob die Einschränkung auf Spalten- oder Tabellenebene definiert ist.
Eine Einschränkung auf Spaltenebene wird während einer Spaltendefinition angegeben, nachdem alle Spaltenattribute außer COLLATION
angegeben wurden, und kann nur die in dieser Definition angegebene Spalte betreffen
Einschränkungen auf Tabellenebene können nur nach den Definitionen der Spalten angegeben werden, die in der Einschränkung verwendet werden.
Einschränkungen auf Tabellenebene sind eine flexiblere Möglichkeit, Einschränkungen festzulegen, da sie Einschränkungen mit mehreren Spalten berücksichtigen können
Sie können Einschränkungen auf Spaltenebene und auf Tabellenebene in derselben CREATE TABLE
-Anweisung mischen
Das System erstellt automatisch den entsprechenden Index für einen Primärschlüssel (PRIMARY KEY
), einen eindeutigen Schlüssel (UNIQUE
) und einen Fremdschlüssel (REFERENCES
für eine Einschränkung auf Spaltenebene, FOREIGN KEY REFERENCES
für eine auf der Tabellenebene).
Einschränkungen auf Spaltenebene und ihre Indizes werden automatisch benannt:
Der Name der Einschränkung hat die Form INTEG_n
, wobei n eine oder mehrere Ziffern darstellt
Der Indexname hat die Form RDB$PRIMARYn
(für einen Primärschlüsselindex), RDB$FOREIGNn
(für einen Fremdschlüsselindex) oder RDB$n
(für einen eindeutigen Schlüsselindex).Auch hier steht n für eine oder mehrere Ziffern.
Die automatische Benennung von Integritätsbedingungen auf Tabellenebene und ihrer Indizes folgt demselben Muster, es sei denn, die Namen werden explizit angegeben.
Eine Einschränkung kann explizit benannt werden, wenn die CONSTRAINT
-Klausel für ihre Definition verwendet wird.Während die Klausel CONSTRAINT
zum Definieren von Einschränkungen auf Spaltenebene optional ist, ist sie für Einschränkungen auf Tabellenebene obligatorisch.Standardmäßig hat der Einschränkungsindex denselben Namen wie die Einschränkung.Wenn für den Constraint-Index ein anderer Name gewünscht wird, kann eine USING
-Klausel eingefügt werden.
USING
-KlauselMit der USING
-Klausel können Sie einen benutzerdefinierten Namen für den automatisch erstellten Index angeben und optional die Richtung des Index festlegen – entweder aufsteigend (Standard) oder absteigend.
PRIMARY KEY
Die Einschränkung PRIMARY KEY
basiert auf einer oder mehreren Schlüsselspalten, wobei für jede Spalte die Einschränkung NOT NULL
angegeben ist.Die Werte in den Schlüsselspalten in jeder Zeile müssen eindeutig sein.Eine Tabelle kann nur einen Primärschlüssel haben.
Ein einspaltiger Primärschlüssel kann als Einschränkung auf Spaltenebene oder als Einschränkung auf Tabellenebene definiert werden
Als Einschränkung auf Tabellenebene muss ein mehrspaltiger Primärschlüssel angegeben werden
UNIQUE
-EinschränkungDie Einschränkung UNIQUE
definiert die Anforderung der Eindeutigkeit des Inhalts für die Werte in einem Schlüssel in der gesamten Tabelle.Eine Tabelle kann eine beliebige Anzahl eindeutiger Schlüsseleinschränkungen enthalten.
Wie beim Primärschlüssel kann die Unique-Einschränkung mehrspaltig sein.Wenn dies der Fall ist, muss sie als Einschränkung auf Tabellenebene angegeben werden.
NULL
in Unique KeysDie SQL-99-kompatiblen Regeln von Firebird für UNIQUE
-Beschränkungen erlauben eine oder mehrere NULL
s in einer Spalte mit einer UNIQUE
-Beschränkung.Dadurch ist es möglich, eine UNIQUE
-Beschränkung für eine Spalte zu definieren, die nicht die NOT NULL
-Beschränkung hat.
Bei UNIQUE
-Schlüsseln, die sich über mehrere Spalten erstrecken, ist die Logik etwas kompliziert:
Mehrere Zeilen mit Null in allen Spalten des Schlüssels sind zulässig
Mehrere Zeilen mit Schlüsseln mit unterschiedlichen Kombinationen von Nullen und Nicht-Null-Werten sind zulässig
Mehrere Zeilen mit den gleichen Schlüsselspalten null und der Rest mit Werten ungleich null sind erlaubt, sofern sich die Werte in mindestens einer Spalte unterscheiden
Mehrere Zeilen mit den gleichen Schlüsselspalten null und der Rest mit Werten ungleich null gefüllt, die in jeder Spalte gleich sind, verletzen die Einschränkung
Die Regeln für die Eindeutigkeit lassen sich wie folgt zusammenfassen:
Im Prinzip werden alle Nullen als verschieden betrachtet. Wenn jedoch zwei Zeilen genau die gleichen Schlüsselspalten haben, die mit Nicht-Null-Werten gefüllt sind, werden die 'NULL'-Spalten ignoriert und die Eindeutigkeit der Nicht-Null-Spalten wird so bestimmt, als ob sie den gesamten Schlüssel bilden würden.
RECREATE TABLE t( x int, y int, z int, unique(x,y,z));
INSERT INTO t values( NULL, 1, 1 );
INSERT INTO t values( NULL, NULL, 1 );
INSERT INTO t values( NULL, NULL, NULL );
INSERT INTO t values( NULL, NULL, NULL ); -- Permitted
INSERT INTO t values( NULL, NULL, 1 ); -- Not permitted
FOREIGN KEY
Ein Fremdschlüssel stellt sicher, dass die teilnehmende(n) Spalte(n) nur Werte enthalten können, die auch in der/den referenzierten Spalte(n) der Mastertabelle vorhanden sind.Diese referenzierten Spalten werden oft als target column bezeichnet.Sie müssen der Primärschlüssel oder ein eindeutiger Schlüssel in der Zieltabelle sein.Für sie muss keine NOT NULL
-Beschränkung definiert sein, obwohl sie, wenn sie der Primärschlüssel sind, natürlich diese Einschränkung haben.
Die Fremdschlüsselspalten in der referenzierenden Tabelle selbst erfordern keine NOT NULL
-Einschränkung.
Ein einspaltiger Fremdschlüssel kann in der Spaltendeklaration mit dem Schlüsselwort REFERENCES
definiert werden:
... ,
ARTIFACT_ID INTEGER REFERENCES COLLECTION (ARTIFACT_ID),
Die Spalte ARTIFACT_ID
im Beispiel verweist auf eine gleichnamige Spalte in der Tabelle COLLECTIONS
.
Auf der Tabellenebene können sowohl einspaltige als auch mehrspaltige Fremdschlüssel definiert werden.Bei einem mehrspaltigen Fremdschlüssel ist die Deklaration auf Tabellenebene die einzige Option.Diese Methode ermöglicht auch die Bereitstellung eines optionalen Namens für die Einschränkung:
...
CONSTRAINT FK_ARTSOURCE FOREIGN KEY(DEALER_ID, COUNTRY)
REFERENCES DEALER (DEALER_ID, COUNTRY),
Beachten Sie, dass sich die Spaltennamen in der referenzierten Tabelle (“master”) von denen im Fremdschlüssel unterscheiden können.
Note
|
Wenn keine Zielspalten angegeben sind, verweist der Fremdschlüssel automatisch auf den Primärschlüssel der Zieltabelle. |
Mit den Unterklauseln ON UPDATE
und ON DELETE
ist es möglich, eine Aktion für die betroffene(n) Fremdschlüsselspalte(n) festzulegen, wenn referenzierte Werte in der Mastertabelle geändert werden:
KEINE AKTION
(Standard) - Nichts wird getan
CASCADE
Die Änderung in der Master-Tabelle wird an die entsprechende(n) Zeile(n) in der Child-Tabelle weitergegeben.Wenn sich ein Schlüsselwert ändert, ändert sich der entsprechende Schlüssel in den untergeordneten Datensätzen auf den neuen Wert;Wenn die Masterzeile gelöscht wird, werden die untergeordneten Datensätze gelöscht.
SET DEFAULT
Die Fremdschlüsselspalten in den betroffenen Zeilen werden auf ihre Standardwerte gesetzt wie sie waren, als die Fremdschlüsseleinschränkung definiert wurde.
SET NULL
Die Fremdschlüsselspalten in den betroffenen Zeilen werden auf NULL
gesetzt.
Die angegebene Aktion oder die Standardeinstellung NO ACTION
kann dazu führen, dass eine Fremdschlüsselspalte ungültig wird.Sie könnte beispielsweise einen Wert erhalten, der in der Mastertabelle nicht vorhanden ist, oder er könnte NULL
werden, während die Spalte eine NOT NULL
-Einschränkung hat.Solche Bedingungen führen dazu, dass die Operation in der Mastertabelle mit einer Fehlermeldung fehlschlägt.
...
CONSTRAINT FK_ORDERS_CUST
FOREIGN KEY (CUSTOMER) REFERENCES CUSTOMERS (ID)
ON UPDATE CASCADE ON DELETE SET NULL
CHECK
-EinschränkungDie Einschränkung CHECK
definiert die Bedingung, die die in diese Spalte eingefügten Werte erfüllen müssen.Eine Bedingung ist ein logischer Ausdruck (auch Prädikat genannt), der die Werte TRUE, FALSE und UNKNOWN zurückgeben kann.Eine Bedingung gilt als erfüllt, wenn das Prädikat TRUE oder den Wert UNKNOWN (entspricht NULL
) zurückgibt.Wenn das Prädikat FALSE zurückgibt, wird der Wert nicht akzeptiert.Diese Bedingung wird zum Einfügen einer neuen Zeile in die Tabelle (die INSERT
-Anweisung) und zum Aktualisieren des vorhandenen Wertes der Tabellenspalte (die UPDATE
-Anweisung) und auch für Anweisungen verwendet, bei denen eine dieser Aktionen stattfinden kann (UPDATE ODER EINFÜGEN, MERGE).
Important
|
Eine |
CHECK
-Einschränkungen — ob auf Tabellen- oder Spaltenebene definiert — beziehen sich auf Tabellenspalten nach ihren Namen.Die Verwendung des Schlüsselworts VALUE
als Platzhalter – wie in den CHECK
-Einschränkungen der Domäne – ist im Kontext der Definition von Spalteneinschränkungen nicht gültig.
mit zwei Einschränkungen auf Spaltenebene und einer auf Tabellenebene:
CREATE TABLE PLACES (
...
LAT DECIMAL(9, 6) CHECK (ABS(LAT) <= 90),
LON DECIMAL(9, 6) CHECK (ABS(LON) <= 180),
...
CONSTRAINT CHK_POLES CHECK (ABS(LAT) < 90 OR LON = 0)
);
NOT NULL
-EinschränkungIn Firebird sind Spalten standardmäßig nullable.Die Einschränkung NOT NULL
gibt an, dass die Spalte nicht NULL
anstelle eines Werts annehmen kann.
Ein NOT NULL
-Constraint kann nur als Spalten-Constraint definiert werden, nicht als Tabellen-Constraint.
SQL SECURITY
-KlauselDie Klausel SQL SECURITY
gibt den Sicherheitskontext zum Ausführen von Funktionen an, auf die in berechneten Spalten verwiesen wird, und Check-Einschränkungen sowie den Standardkontext, der für Trigger verwendet wird, die für diese Tabelle ausgelöst werden.Wenn SQL-Sicherheit nicht angegeben ist, wird der Standardwert der Datenbank zur Laufzeit angewendet.
Siehe auch SQL-Sicherheit im Kapitel Sicherheit.
Wenn die Datenbank mit ALTER DATABASE INCLUDE ALL TO PUBLICATION
konfiguriert wurde, werden neue Tabellen automatisch zur Veröffentlichung hinzugefügt, sofern sie nicht mit der DISABLE PUBLICATION
-Klausel überschrieben werden.
Wenn die Datenbank nicht für INCLUDE ALL
konfiguriert wurde (oder später mit ALTER DATABASE EXCLUDE ALL FROM PUBLICATION
neu konfiguriert wurde), werden neue Tabellen nicht automatisch zur Veröffentlichung hinzugefügt.Um Tabellen für die Veröffentlichung einzuschließen, muss die Klausel ENABLE PUBLICATION
verwendet werden.
ALTER TABLE
Ändern der Struktur einer Tabelle.
DSQL, ESQL
ALTER TABLE tablename
<operation> [, <operation> ...]
<operation> ::=
ADD <col_def>
| ADD <tconstraint>
| DROP colname
| DROP CONSTRAINT constr_name
| ALTER [COLUMN] colname <col_mod>
| ALTER SQL SECURITY {INVOKER | DEFINER}
| DROP SQL SECURITY
| {ENABLE | DISABLE} PUBLICATION
<col_mod> ::=
TO newname
| POSITION newpos
| <regular_col_mod>
| <computed_col_mod>
| <identity_col_mod>
<regular_col_mod> ::=
TYPE {<datatype> | domainname}
| SET DEFAULT {<literal> | NULL | <context_var>}
| DROP DEFAULT
| {SET | DROP} NOT NULL
<computed_col_mod> ::=
[TYPE <datatype>] {COMPUTED [BY] | GENERATED ALWAYS AS} (<expression>)
<identity_col_mod> ::=
SET GENERATED {ALWAYS | BY DEFAULT} [<identity_mod_option>...]
| <identity_mod_options>...
| DROP IDENTITY
<identity_mod_options> ::=
RESTART [WITH restart_value]
| SET INCREMENT [BY] inc_value
!! Siehe auch CREATE TABLE
-Syntax für weitere Regel !!
Parameter | Beschreibung |
---|---|
tablename |
Name (Bezeichner) der Tabelle |
operation |
Eine der verfügbaren Operationen, die die Struktur der Tabelle ändern |
colname |
Name (Bezeichner) für eine Spalte in der Tabelle.Die maximale Länge beträgt 63 Zeichen.Muss in der Tabelle eindeutig sein. |
domain_name |
Domainname |
newname |
Neuer Name (Bezeichner) für die Spalte.Die maximale Länge beträgt 63 Zeichen.Muss in der Tabelle eindeutig sein. |
newpos |
Die neue Spaltenposition (eine ganze Zahl zwischen 1 und der Anzahl der Spalten in der Tabelle) |
other_table |
Der Name der Tabelle, auf die von der Fremdschlüsseleinschränkung verwiesen wird |
literal |
Ein Literalwert, der im angegebenen Kontext zulässig ist |
context_var |
Eine Kontextvariable, deren Typ im angegebenen Kontext zulässig ist |
check_condition |
Die Bedingung einer |
restart_value |
Der erste Wert der Identitätsspalte nach dem Neustart |
inc_value |
Der Inkrement- (oder Schritt-)Wert der Identitätsspalte;Null ( |
Die Anweisung ALTER TABLE
ändert die Struktur einer bestehenden Tabelle.Mit einer ALTER TABLE
-Anweisung ist es möglich, mehrere Operationen auszuführen, Spalten und Einschränkungen hinzuzufügen/zu löschen und auch Spaltenspezifikationen zu ändern.
Mehrere Operationen in einer ALTER TABLE
-Anweisung werden durch Kommas getrennt.
Einige Änderungen in der Struktur einer Tabelle erhöhen den Metadaten-Änderungszähler (“version count”), der jeder Tabelle zugewiesen ist.Die Anzahl der Metadatenänderungen ist für jede Tabelle auf 255 begrenzt.Sobald der Zähler die Grenze von 255 erreicht hat, können Sie keine weiteren Änderungen an der Struktur der Tabelle vornehmen, ohne den Zähler zurückzusetzen.
SET NOT NULL
und DROP NOT NULL
Die SET NOT NULL
-Klausel fügt einer vorhandenen Tabellenspalte eine NOT NULL
-Einschränkung hinzu.Im Gegensatz zur Definition in CREATE TABLE
ist die Angabe eines Constraint-Namens nicht möglich.
Note
|
Das erfolgreiche Hinzufügen der Eine explizite |
Das Löschen der NOT NULL
-Beschränkung aus der Spalte, wenn ihr Typ eine Domäne ist, die auch eine NOT NULL
-Beschränkung hat, hat keine beobachtbaren Auswirkungen, bis die NOT NULL
-Beschränkung ebenfalls aus der Domäne gelöscht wird.
COMPUTED [BY]
oder GENERATED ALWAYS AS
Der einer berechneten Spalte zugrunde liegende Datentyp und Ausdruck können mit einer COMPUTED [BY]
- oder GENERATED ALWAYS AS
-Klausel in der ALTER TABLE ALTER [COLUMN]
-Anweisung geändert werden.Das Konvertieren einer regulären Spalte in eine berechnete und umgekehrt ist nicht zulässig.
Für Identitätsspalten (SET GENERATED {ALWAYS | BY DEFAULT}
) ist es möglich, mehrere Eigenschaften mit den folgenden Klauseln zu ändern.
Das SET GENERATED {ALWAYS | BY DEFAULT}
ändert eine Identitätsspalte von ALWAYS
in BY DEFAULT
und umgekehrt.Dies ist nicht möglich, um eine reguläre Spalte in eine Identitätsspalte zu ändern.
RESTART
Die RESTART
-Klausel startet die Sequenz neu, die zum Generieren von Identitätswerten verwendet wird.Wenn nur die RESTART
-Klausel angegeben wird, wird die Sequenz auf den Anfangswert zurückgesetzt, der bei der Definition der Identitätsspalte angegeben wurde.Wenn die optionale WITH restart_value
-Klausel angegeben wird, wird die Sequenz mit dem angegebenen Wert neu gestartet.
Note
|
In Firebird 3.0 würde Es ist derzeit nicht möglich, den konfigurierten Startwert zu ändern. |
SET INCREMENT
Die Klausel SET INCREMENT
ändert das Inkrement der Identitätsspalte.
DROP IDENTITY
Die Klausel DROP IDENTITY
ändert eine Identitätsspalte in eine reguläre Spalte.
Note
|
Es ist nicht möglich, eine reguläre Spalte in eine Identitätsspalte zu ändern. |
Mit den Klauseln ALTER SQL SECURITY
oder DROP SQL SECURITY
ist es möglich, die SQL-Sicherheitseigenschaft einer Tabelle zu ändern oder zu löschen.Nach dem Löschen von SQL Security wird der Standardwert der Datenbank zur Laufzeit angewendet.
Note
|
Wenn die SQL-Sicherheitseigenschaft für eine Tabelle geändert wird, sehen Trigger, die keine explizite SQL-Sicherheitseigenschaft haben, die Auswirkung der Änderung erst, wenn der Trigger das nächste Mal in den Metadatencache geladen wird. |
Um die Replikation einer Tabelle zu stoppen, verwenden Sie die Klausel DISABLE PUBLICATION
.Um die Replikation einer Tabelle zu starten, verwenden Sie die Klausel ENABLE PUBLICATION
.
Die Änderung des Veröffentlichungsstatus wird beim Commit wirksam.
Die folgenden Änderungen werden nicht unterstützt:
Ändern der Sortierung einer Zeichentypspalte
Die ALTER TABLE
-Anweisung kann ausgeführt werden durch:
Der Besitzer der Tabelle
Benutzer mit der Berechtigung ALTER ANY TABLE
ALTER TABLE
Hinzufügen der Spalte "CAPITAL" zur Tabelle "COUNTRY".
ALTER TABLE COUNTRY
ADD CAPITAL VARCHAR(25);
Hinzufügen der Spalte "CAPITAL" mit den Einschränkungen "NOT NULL" und "UNIQUE" und Löschen der Spalte "CURRENCY".
ALTER TABLE COUNTRY
ADD CAPITAL VARCHAR(25) NOT NULL UNIQUE,
DROP CURRENCY;
Hinzufügen der Prüfbedingung CHK_SALARY
und eines Fremdschlüssels zur Tabelle JOB
.
ALTER TABLE JOB
ADD CONSTRAINT CHK_SALARY CHECK (MIN_SALARY < MAX_SALARY),
ADD FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY);
Festlegen des Standardwerts für das Feld "MODEL", Ändern des Typs der Spalte "ITEMID" und Umbenennen der Spalte MODELNAME.
ALTER TABLE STOCK
ALTER COLUMN MODEL SET DEFAULT 1,
ALTER COLUMN ITEMID TYPE BIGINT,
ALTER COLUMN MODELNAME TO NAME;
Neustart der Sequenz einer Identitätsspalte.
ALTER TABLE objects
ALTER ID RESTART WITH 100;
Ändern der berechneten Spalten NEW_SALARY
und SALARY_CHANGE
.
ALTER TABLE SALARY_HISTORY
ALTER NEW_SALARY GENERATED ALWAYS AS
(OLD_SALARY + OLD_SALARY * PERCENT_CHANGE / 100),
ALTER SALARY_CHANGE COMPUTED BY
(OLD_SALARY * PERCENT_CHANGE / 100);
ADD
-KlauselMit der ADD
-Klausel können Sie eine neue Spalte oder eine neue Tabelleneinschränkung hinzufügen.Die Syntax zum Definieren der Spalte und die Syntax zum Definieren der Tabelleneinschränkung entsprechen denen, die für die CREATE TABLE
-Anweisung beschrieben wurden.
Jedes Mal, wenn eine neue Spalte hinzugefügt wird, wird der Metadatenänderungszähler um eins erhöht
Das Hinzufügen einer neuen Tabelleneinschränkung erhöht nicht den Metadatenänderungszähler
Caution
|
Zu beachtende Punkte
|
DROP
-KlauselDie Klausel DROP colname
löscht die angegebene Spalte aus der Tabelle.Ein Versuch, eine Spalte zu löschen, schlägt fehl, wenn etwas darauf verweist.Betrachten Sie die folgenden Elemente als Quellen potenzieller Abhängigkeiten:
Spalten- oder Tabellenbeschränkungen
Indizes
gespeicherte Prozeduren und Trigger
Aufrufe
Jedes Mal, wenn eine Spalte gelöscht wird, wird der Metadaten-Änderungszähler der Tabelle um eins erhöht.
DROP CONSTRAINT
-KlauselDie Klausel DROP CONSTRAINT
löscht die angegebene Einschränkung auf Spalten- oder Tabellenebene.
Eine PRIMARY KEY
- oder UNIQUE
-Schlüsseleinschränkung kann nicht gelöscht werden, wenn sie von einer FOREIGN KEY
-Einschränkung in einer anderen Tabelle referenziert wird.Es wird notwendig sein, diese FOREIGN KEY
-Beschränkung zu löschen, bevor versucht wird, die PRIMARY KEY
- oder UNIQUE
-Schlüssel-Beschränkung, auf die sie verweist, zu löschen.
Das Löschen einer Spalteneinschränkung oder einer Tabelleneinschränkung erhöht den Metadatenänderungszähler nicht.
ALTER [COLUMN]
-KlauselMit der ALTER [COLUMN]
-Klausel können Attribute vorhandener Spalten geändert werden, ohne dass die Spalte gelöscht und erneut hinzugefügt werden muss.Erlaubte Modifikationen sind:
den Namen ändern (hat keinen Einfluss auf den Metadaten-Änderungszähler)
den Datentyp ändern (erhöht den Metadaten-Änderungszähler um eins)
die Spaltenposition in der Spaltenliste der Tabelle ändern (hat keinen Einfluss auf den Metadaten-Änderungszähler)
den Standardspaltenwert löschen (hat keinen Einfluss auf den Metadaten-Änderungszähler)
einen Standardspaltenwert festlegen oder den vorhandenen Standardwert ändern (hat keinen Einfluss auf den Metadatenänderungszähler)
Typ und Ausdruck für eine berechnete Spalte ändern (hat keinen Einfluss auf den Metadaten-Änderungszähler)
Setzen Sie die Einschränkung NOT NULL
(hat keinen Einfluss auf den Metadaten-Änderungszähler)
lösche die NOT NULL
-Beschränkung (hat keinen Einfluss auf den Metadaten-Änderungszähler)
Ändern Sie den Typ einer Identitätsspalte oder ändern Sie eine Identitätsspalte in eine normale Spalte
eine Identitätsspalte neu starten
Inkrement einer Identitätsspalte ändern
TO
-KlauselDas Schlüsselwort TO
mit einem neuen Bezeichner benennt eine vorhandene Spalte um.Die Tabelle darf keine vorhandene Spalte mit demselben Bezeichner aufweisen.
Es ist nicht möglich, den Namen einer Spalte zu ändern, die in einer Einschränkung enthalten ist: PRIMARY KEY
, UNIQUE
-Schlüssel, FOREIGN KEY
, Spaltenbeschränkung oder die CHECK
-Beschränkung der Tabelle.
Das Umbenennen einer Spalte ist auch nicht zulässig, wenn die Spalte in einem Trigger, einer gespeicherten Prozedur oder einer Ansicht verwendet wird.
TYPE
-KlauselDas Schlüsselwort TYPE
ändert den Datentyp einer existierenden Spalte in einen anderen zulässigen Typ.Eine Typänderung, die zu Datenverlust führen könnte, wird nicht zugelassen.Beispielsweise darf die Anzahl der Zeichen im neuen Typ für eine CHAR
- oder VARCHAR
-Spalte nicht kleiner sein als die dafür vorhandene Spezifikation.
Wurde die Spalte als Array deklariert, darf weder der Typ noch die Anzahl der Dimensionen geändert werden.
Der Datentyp einer Spalte, die an einem Fremdschlüssel, Primärschlüssel oder einer eindeutigen Einschränkung beteiligt ist, kann nicht geändert werden.
POSITION
-KlauselDas Schlüsselwort POSITION ändert die Position einer vorhandenen Spalte im fiktiven "von links nach rechts"-Layout des Datensatzes.
Die Nummerierung der Spaltenpositionen beginnt bei 1.
Wenn eine Position kleiner als 1 angegeben wird, wird eine Fehlermeldung zurückgegeben
Wenn eine Positionsnummer größer als die Anzahl der Spalten in der Tabelle ist, wird ihre neue Position stillschweigend an die Anzahl der Spalten angepasst.
DROP DEFAULT
und SET DEFAULT
Die optionale DROP DEFAULT
-Klausel löscht den Standardwert für die Spalte, wenn er zuvor durch eine CREATE TABLE
- oder ALTER TABLE
-Anweisung dort abgelegt wurde.
Wenn die Spalte auf einer Domäne mit einem Standardwert basiert, wird der Standardwert auf den Domänenstandard zurückgesetzt
Ein Ausführungsfehler wird ausgelöst, wenn versucht wird, den Standardwert einer Spalte zu löschen, die keinen Standardwert hat oder deren Standardwert domänenbasiert ist
Die optionale SET DEFAULT
-Klausel setzt einen Standardwert für die Spalte.Wenn die Spalte bereits einen Standardwert hat, wird dieser durch den neuen ersetzt.Der auf eine Spalte angewendete Standardwert überschreibt immer einen von einer Domäne geerbten Wert.
DROP TABLE
Löschen (Löschen) einer Tabelle
DSQL, ESQL
DROP TABLE tablename
Parameter | Beschreibung |
---|---|
tablename |
Name (Bezeichner) der Tabelle |
Die Anweisung DROP TABLE
löscht (löscht) eine vorhandene Tabelle.Wenn die Tabelle Abhängigkeiten aufweist, schlägt die Anweisung DROP TABLE
mit einem Ausführungsfehler fehl.
Wenn eine Tabelle gelöscht wird, werden auch alle ihre Trigger und Indizes gelöscht.
Die DROP TABLE
-Anweisung kann ausgeführt werden durch:
Der Besitzer der Tabelle
Benutzer mit dem Privileg DROP ANY TABLE
DROP TABLE
DROP TABLE COUNTRY;
RECREATE TABLE
Erstellen einer neuen Tabelle (Relation) oder Wiederherstellen einer bestehenden Tabelle
DSQL
RECREATE [GLOBAL TEMPORARY] TABLE tablename [EXTERNAL [FILE] 'filespec'] (<col_def> [, {<col_def> | <tconstraint>} ...]) [{<table_attrs> | <gtt_table_attrs>}]
Siehe Abschnitt CREATE TABLE
für die vollständige Syntax von CREATE TABLE
und Beschreibungen zur Definition von Tabellen, Spalten und Einschränkungen.
RECREATE TABLE
erstellt oder erstellt eine Tabelle neu.Existiert bereits eine Tabelle mit diesem Namen, versucht die Anweisung RECREATE TABLE
, sie zu löschen und eine neue zu erstellen.Vorhandene Abhängigkeiten verhindern die Ausführung der Anweisung.
RECREATE TABLE
RECREATE TABLE COUNTRY (
COUNTRY COUNTRYNAME NOT NULL PRIMARY KEY,
CURRENCY VARCHAR(10) NOT NULL
);