FirebirdSQL logo
 DOMAININDEX 

NOT NULL-Einschränkung

In 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-Klausel

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

docnext count = 28

Replikationsverwaltung

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

Verwendet für

Ändern der Struktur einer Tabelle.

Verfügbar in

DSQL, ESQL

Syntax
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 !!
Table 1. ALTER TABLE-Anweisungsparameter
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 CHECK-Einschränkung, die erfüllt wird, wenn sie als TRUE oder UNKNOWN/NULL ausgewertet wird

restart_value

Der erste Wert der Identitätsspalte nach dem Neustart

inc_value

Der Inkrement- (oder Schritt-)Wert der Identitätsspalte;Null (0) ist nicht erlaubt.

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.

Versionsanzahl-Inkremente

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.

So setzen Sie den Metadaten-Änderungszähler zurück
Sie müssen die Datenbank mit dem Dienstprogramm gbak sichern und wiederherstellen.

Die Klauseln 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 NOT NULL-Einschränkung unterliegt einer vollständigen Datenvalidierung für die Tabelle. Stellen Sie daher sicher, dass die Spalte keine Nullen enthält, bevor Sie die Änderung vornehmen.

Eine explizite NOT NULL-Einschränkung für domänenbasierte Spalten überschreibt Domäneneinstellungen.In diesem Szenario erstreckt sich das Ändern der Domäne in NULL-Zulässigkeit nicht auf eine Tabellenspalte.

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.

Die Klauseln 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.

Identitätsspalten ändern

Für Identitätsspalten (SET GENERATED {ALWAYS | BY DEFAULT}) ist es möglich, mehrere Eigenschaften mit den folgenden Klauseln zu ändern.

Identitätstyp

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 RESTART WITH restart_value auch den konfigurierten Anfangswert in restart_value ändern.Dies war nicht mit dem SQL-Standard konform, daher wird in Firebird 4.0 RESTART WITH restart_value die Sequenz nur mit dem angegebenen Wert neu starten.Nachfolgende RESTARTs (ohne WITH) verwenden den START WITH-Wert, der bei der Definition der Identitätsspalte angegeben wurde.

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.

Ändern der SQL-Sicherheit

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.

Replikationsverwaltung

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.

Attribute, die nicht geändert werden können

Die folgenden Änderungen werden nicht unterstützt:

  • Ändern der Sortierung einer Zeichentypspalte

Wer kann eine Tabelle ändern?

Die ALTER TABLE-Anweisung kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Tabelle

  • Benutzer mit der Berechtigung ALTER ANY TABLE

Beispiele für die Verwendung von ALTER TABLE

  1. Hinzufügen der Spalte "CAPITAL" zur Tabelle "COUNTRY".

    ALTER TABLE COUNTRY
      ADD CAPITAL VARCHAR(25);
  2. 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;
  3. 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);
  4. 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;
  5. Neustart der Sequenz einer Identitätsspalte.

    ALTER TABLE objects
      ALTER ID RESTART WITH 100;
  6. Ä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);

Die ADD-Klausel

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

Auswirkung auf die Versionsanzahl
  • 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
  1. Das Hinzufügen einer Spalte mit einer NOT NULL-Einschränkung ohne einen DEFAULT-Wert wird fehlschlagen, wenn die Tabelle bereits Zeilen enthält.Beim Hinzufügen einer Nicht-Nullable-Spalte wird empfohlen, entweder einen Standardwert dafür festzulegen oder sie als Nullable-fähig zu erstellen, die Spalte in vorhandenen Zeilen mit einem Nicht-Null-Wert zu aktualisieren und dann eine NOT NULL-Einschränkung hinzuzufügen.

  2. Wenn eine neue 'CHECK'-Beschränkung hinzugefügt wird, werden vorhandene Daten nicht auf Übereinstimmung getestet.Es wird empfohlen, vorhandene Daten vorab mit dem neuen 'CHECK'-Ausdruck zu testen.

  3. Obwohl das Hinzufügen einer Identitätsspalte unterstützt wird, ist dies nur erfolgreich, wenn die Tabelle leer ist.Das Hinzufügen einer Identitätsspalte schlägt fehl, wenn die Tabelle eine oder mehrere Zeilen enthält.

Die DROP-Klausel

Die 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

Auswirkung auf die Versionsanzahl
  • Jedes Mal, wenn eine Spalte gelöscht wird, wird der Metadaten-Änderungszähler der Tabelle um eins erhöht.

Die DROP CONSTRAINT-Klausel

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

Auswirkung auf die Versionsanzahl
  • Das Löschen einer Spalteneinschränkung oder einer Tabelleneinschränkung erhöht den Metadatenänderungszähler nicht.

Die ALTER [COLUMN]-Klausel

Mit 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

Umbenennen einer Spalte: die TO-Klausel

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

Ändern des Datentyps einer Spalte: die TYPE-Klausel

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

Ändern der Position einer Spalte: die POSITION-Klausel

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

Die Klauseln 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

Verwendet für

Löschen (Löschen) einer Tabelle

Verfügbar in

DSQL, ESQL

Syntax
DROP TABLE tablename
Table 1. DROP TABLE-Anweisungsparameter
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.

Wer kann eine Tabelle löschen?

Die DROP TABLE-Anweisung kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Tabelle

  • Benutzer mit dem Privileg DROP ANY TABLE

Beispiel für DROP TABLE

Löschen der 'COUNTRY'-Tabelle.
DROP TABLE COUNTRY;

RECREATE TABLE

Verwendet für

Erstellen einer neuen Tabelle (Relation) oder Wiederherstellen einer bestehenden Tabelle

Verfügbar in

DSQL

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

Beispiel für RECREATE TABLE

Erstellen oder Neuerstellen der Tabelle 'COUNTRY'.
RECREATE TABLE COUNTRY (
  COUNTRY COUNTRYNAME NOT NULL PRIMARY KEY,
  CURRENCY VARCHAR(10) NOT NULL
);