Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Datendefinitionssprache

Verwenden Sie die Cloud Spanner-Datendefinitionssprache (Data Definition Language, DDL) für diese Aufgaben:

  • Datenbank erstellen
  • Tabellen in einer Datenbank erstellen, ändern oder löschen
  • Spalten in einer Tabelle hinzufügen, ändern oder löschen
  • Indexe in einer Datenbank erstellen oder löschen

DDL-Syntax

statement:
    { create_database | alter_database | create_table | create_index | alter_table | drop_table | drop_index }

create_database:
    CREATE DATABASE database_id

alter_database:
    ALTER DATABASE database_id
    action

where action is:
    SET OPTIONS ( optimizer_version = { 1 ...  2 | null },
                  version_retention_period = { 'duration' | null } )

create_table:
    CREATE TABLE ( [
       { column_name data_type [NOT NULL] [AS ( expression ) STORED] [ options_def ]
       | table_constraint }
       [, ... ]
    ] ) PRIMARY KEY ( [ column_name [ { ASC | DESC } ], ...] )
    [, INTERLEAVE IN PARENT table_name [ ON DELETE { CASCADE | NO ACTION } ] ]

    where data_type is:
        { scalar_type | array_type }

    and options_def is:
        { OPTIONS ( allow_commit_timestamp = { true | null } ) }

    and table_constraint is:
        [ CONSTRAINT constraint_name ]
        { CHECK ( expression ) |
          FOREIGN KEY ( column_name [, ... ] ) REFERENCES ref_table ( ref_column [, ... ] ) }

create_index:
    CREATE [ UNIQUE ] [ NULL_FILTERED ] INDEX index_name
    ON table_name ( key_part [, ...] ) [ storing_clause ] [ , interleave_clause ]

    where index_name is:
        {a—z|A—Z}[{a—z|A—Z|0—9|_}+]

    and key_part is:
        column_name [ { ASC | DESC } ]

    and storing_clause is:
        STORING ( column_name [, ...] )

    and interleave_clause is:
        INTERLEAVE IN table_name

alter_table:
    ALTER TABLE table_name
    action [, ... ]

    where action is:
        ADD [ COLUMN ] column_name data_type [ NOT NULL ] [AS ( expression ) STORED] [ options_def ]
        DROP [ COLUMN ] column_name
        ADD table_constraint
        DROP CONSTRAINT constraint_name
        SET ON DELETE { CASCADE | NO ACTION }
        ALTER [ COLUMN ] column_name { { data_type } [ NOT NULL ] | SET [ options_def ] }

    and data_type is:
        { scalar_type | array_type }

    and options_def is:
        { OPTIONS ( allow_commit_timestamp = { true | null } ) }

    and table_constraint is:
        [ CONSTRAINT constraint_name ]
        { CHECK ( expression ) |
          FOREIGN KEY ( column_name [, ... ] ) REFERENCES ref_table ( ref_column [, ... ] ) }

drop_table:
    DROP TABLE table_name

drop_index:
    DROP INDEX index_name

scalar_type:
    { BOOL | INT64 | FLOAT64 | NUMERIC | STRING( length ) | BYTES( length ) | DATE | TIMESTAMP }

length:
    { int64_value | MAX }

array_type:
    ARRAY< scalar_type >

int64_value:
    { decimal_value | hex_value }

decimal_value:
    [-]0—9+

hex_value:
    [-]0x{0—9|a—f|A—F}+

database_id:
    {a—z}[{a—z|0—9|_|-}+]{a—z|0—9}

table_name, column_name, index_name:
    {a—z|A—Z}[{a—z|A—Z|0—9|_}+]

Notation:

  • Eckige Klammern "[ ]" zeigen optionale Klauseln an.
  • Runde Klammern "( )" sind tatsächlich im Code vorhandene Klammern.
  • Der senkrechte Strich "|" zeigt ein logisches ODER an.
  • Geschweifte Klammern "{ }" umschließen einen Satz von Optionen.
  • Ein Komma gefolgt von Auslassungspunkten gibt an, dass sich das vorangehende Element in einer durch Kommas getrennten Liste wiederholen kann. item [, ...] gibt ein oder mehrere Elemente an und [item, ...] gibt null oder mehr Elemente an.
  • Ein Komma "," zeigt das Literalkomma an.
  • Spitze Klammern ("< >") zeigen spitze Klammern in Literalen an.
  • Ein Geviertstrich "—" zeigt einen Wertebereich zwischen den Elementen auf beiden Seiten des Striches an.
  • Das Pluszeichen "+" zeigt an, dass das vorangehende Element wiederholt werden kann.

Reservierte Keywords

Einige Wörter (beispielsweise Typnamen) sind in der Cloud Spanner-DDL reservierte Wörter. Wenn Sie in Ihrem Schema ein reserviertes Schlüsselwort als Kennung benötigen, schließen Sie es in Graviszeichen (`) ein. Eine vollständige Liste der reservierten Schlüsselwörter in Cloud Spanner finden Sie unter Lexikalische Struktur und Syntax.

Beispiel:

CREATE TABLE MyTable (
  RowId INT64 NOT NULL,
  `Int64` INT64
) PRIMARY KEY (RowId);

Namenskonventionen

Folgende Regeln gelten für Tabellen-, Spalten-, Index- und Fremdschlüsselnamen.

  • Muss mindestens 1 Zeichen enthalten.

  • Er kann maximal 128 Zeichen umfassen.

  • Sie müssen mit einem Groß- oder Kleinbuchstaben beginnen.

  • Sie dürfen Groß- und Kleinbuchstaben sowie Zahlen und Unterstriche enthalten, jedoch keine Bindestriche.

  • Es dürfen nie zwei Cloud Spanner-Objekte mit demselben Namen erstellt werden. Dies gilt auch für Namen, die sich nur in der Groß- und Kleinschreibung unterscheiden. Beispiel: Die zweite Anweisung im folgenden Snippet schlägt fehl, da sich die Tabellennamen nur in Groß- und Kleinschreibung unterscheiden.

    CREATE TABLE MyTable (col1 INT64) PRIMARY KEY (col1);
    CREATE TABLE MYTABLE (col1 INT64) PRIMARY KEY (col1);
    
  • Wenn Sie in einer DDL-Anweisung auf andere Schemaobjekte verweisen (z. B. ein Spaltenname für einen Primärschlüssel oder Tabellen- und Spaltennamen in einem Index), müssen Sie die ursprüngliche Groß-/Kleinschreibung der Namen dieser Entitäten verwenden. Betrachten Sie beispielsweise die Tabelle Singers, die mit folgender Anweisung erstellt wurde.

    CREATE TABLE Singers (
      SingerId   INT64 NOT NULL,
      FirstName  STRING(1024),
      LastName   STRING(1024),
      SingerInfo BYTES(MAX),
      BirthDate  DATE,
    ) PRIMARY KEY(SingerId);
    

    Der folgende Befehl schlägt mit der Nachricht Table not found: singers fehl, da er für die Tabelle Singers eine andere Groß-/Kleinschreibung verwendet.

    CREATE INDEX SingersByFirstLastName ON singers(FirstName, LastName)
    
  • Bei Cloud Spanner-Schemaobjektnamen wird die Groß-/Kleinschreibung nicht berücksichtigt. Betrachten Sie beispielsweise die Tabelle MyTable2, die mit folgender Anweisung erstellt wurde.

    CREATE TABLE MyTable2 (col1 INT64) PRIMARY KEY (col1);
    

    Folgende Abfragen sind erfolgreich, da bei Namen von Schemaobjekten nicht zwischen Groß- und Kleinschreibung unterschieden wird.

    SELECT col1 FROM MyTable2 LIMIT 1
    SELECT COL1 FROM MYTABLE2 LIMIT 1
    SELECT COL1 FROM mytable2 LIMIT 1
    INSERT INTO MYTABLE2 (col1) VALUES(1)
    

DATABASE-Anweisungen

CREATE DATABASE

Beim Erstellen einer Cloud Spanner-Datenbank müssen Sie eine CREATE DATABASE-Anweisung bereitstellen, die die ID der Datenbank definiert:

CREATE DATABASE database_id

where database_id
    {a—z}[{a—z|0—9|_|-}+]{a—z|0—9}

Parameter

database_id

ALTER DATABASE

Ändert die Definition einer Tabelle.

Syntax

ALTER DATABASE database_id
    action

where database_id is:
    {a—z}[{a—z|0—9|_|-}+]{a—z|0—9}

and action is:
    SET OPTIONS ( optimizer_version = { 1 ...  2 | null },
                  version_retention_period = { 'duration' | null } )

Beschreibung

ALTER DATABASE ändert die Definition einer vorhandenen Datenbank.

SET OPTIONS

  • Mit dieser Klausel können Sie eine Option auf Datenbankebene der Schemahierarchie festlegen.

Parameter

database_id

  • Der Name der Datenbank, deren Attribute geändert werden sollen. Wenn der Name ein reserviertes Wort ist oder ein Bindestrich enthält, setzen Sie es in Graviszeichen (`). Weitere Informationen zu Namenskonventionen für Datenbanken finden Sie in diesem Dokument unter Namenskonventionen.

options_def

  • Mit der Option optimizer_version = { 1 ... 2 | null } können Sie die Version der Abfrageoptimierung angeben. Standardmäßig ist dies die neueste Version des Optimierungstools. Sie können aber auch jede verfügbare Optimierungsversion angeben. Wenn Sie diese Option auf null setzen, entspricht sie der aktuellen Version. Weitere Informationen finden Sie unter Abfrageoptimierungstool.

  • Der version_retention_period = { 'duration' | null } ist der Zeitraum, für den Cloud Spanner alle Versionen von Daten und Schemas für die Datenbank speichert. Die Dauer muss im Bereich [1h, 7d] liegen und kann in Tagen, Stunden, Minuten oder Sekunden angegeben werden. Die Werte 1d, 24h, 1440m und 86400s sind beispielsweise äquivalent. Wenn Sie den Wert auf null festlegen, wird die Aufbewahrungsdauer auf 1 Stunde zurückgesetzt. Diese Option kann zur Wiederherstellung zu einem bestimmten Zeitpunkt verwendet werden. Weitere Informationen finden Sie unter Wiederherstellung auf einen bestimmten Zeitpunkt.

Datentypen

Skalare

Die Syntax für die Verwendung eines skalaren Typs in DDL lautet:

{ BOOL | INT64 | FLOAT64 | NUMERIC | STRING( length ) | BYTES( length ) | DATE | TIMESTAMP }

length:
    { int64_value | MAX }

int64_value:
    { decimal_value | hex_value }

decimal_value:
    [-]0—9+

hex_value:
    [-]0x{0—9|a—f|A—F}+

Ein int64_value muss eine Ganzzahl zwischen -9,223,372,036,854,775,808 (-263) bis 9,223,372,036,854,775,807 (263 − 1) sein. Sie kann mit der Dezimal- oder Hexadezimalschreibweise angegeben werden. Die hexadezimale Form erfordert das Präfix 0x mit einem kleinen x.

STRING

STRING ist eine Unicode-Zeichenfolge mit variabler Länge. Der Wert muss ein gültiger Unicode-String sein. Die Länge (length) ist erforderlich und gibt die maximale Anzahl der Unicode-Zeichen (nicht Byte) an, die in dem Feld gespeichert werden können.

Hinweise:

  • Schreibvorgänge in der Spalte werden abgelehnt, wenn der neue Wert kein gültiger Unicode-String ist oder die angegebene Länge überschreitet.

  • length kann eine Ganzzahl im Bereich [1, 2621440] sein.

  • Für ein Feld mit nicht vorhersehbarer Länge oder ein Feld, das nicht beschränkt werden muss, können Sie für length den Konvergenzwert MAX angeben, der für Validierungszwecke dem Wert 2621440 entspricht.

    Nur die tatsächliche Länge der gespeicherten Zeichenfolge wirkt sich auf die Speicherkosten aus. Bei Angabe von MAX wird keine zusätzliche Speicherkapazität belegt.

  • Für Cloud Spanner sind beim Empfang auf dem Server Unicode-Zeichenfolgen mit UTF-8-Codierung erforderlich.

  • Die Sortierung erfolgt nach den numerischen Werten der Unicode-Zeichen (technisch gesehen nach Codepunkt-Werten, also mit geringen Abweichungen aufgrund der Kombinationszeichen). Für ASCII-Zeichenfolgen ist dies die traditionelle Sortierreihenfolge.

  • Sie können die Länge einer Spalte reduzieren, nachdem die Tabelle erstellt wurde. Dabei muss Cloud Spanner jedoch überprüfen, ob die vorhandenen Daten die Längenbeschränkung einhalten.

BYTES

BYTES ist eine binäre Zeichenkette mit variabler Länge. Die Länge ist erforderlich und stellt die maximale Byteanzahl dar, die in dem Feld gespeichert werden kann.

Hinweise:

  • Schreibvorgänge in der Spalte werden abgelehnt, wenn der neue Wert die angegebene Länge überschreitet.

  • length kann eine Ganzzahl im Bereich [1, 10485760] oder der Konvergenzwert MAX sein, der für Validierungszwecke dem Wert 10485760 entspricht.

    Nur die tatsächlich gespeicherten Byte wirken sich auf die Speicherkosten aus. Durch Angabe von MAX wird keine zusätzliche Speicherkapazität belegt.

  • Sie können die Länge einer Spalte reduzieren, nachdem die Tabelle erstellt wurde. Dabei muss Cloud Spanner jedoch überprüfen, ob die vorhandenen Daten die Längenbeschränkung einhalten.

DATE

  • Ein von der Zeitzone unabhängiges Datum.
  • Der Bereich [0001-01-01, 9999-12-31] ist das vorgeschriebene Intervall für Datumsangaben. Das Schreiben in eine Datumsspalte wird abgelehnt, wenn der Wert außerhalb dieses Intervalls liegt.
  • Weitere Informationen und das kanonische Format finden Sie in Datentypen.

TIMESTAMP

  • Ein Zeitstempel mit einer Genauigkeit bis auf Nanosekunden.
  • Unabhängig von der Zeitzone im Bereich [0001-01-01 00:00:00 bis 10000-01-01 00:00:00].
  • Weitere Informationen und das kanonische Format finden Sie in Datentypen.

Arrays

Die Syntax für die Verwendung des Typs ARRAY in DDL lautet:

ARRAY< scalar_type >

Cloud Spanner unterstützt Arrays aus skalaren Werten. Der primäre Zweck von Arrays ist die platzsparende Speicherung einer Sammlung von Werten. Arrays sollen nicht den Zugriff auf einzelne Elemente ermöglichen. Um ein einzelnes Element zu lesen oder zu schreiben, muss der ganze Array gelesen oder geschrieben werden.

Wenn Ihre Anwendung Datenstrukturen wie Vektoren oder wiederholte Felder verwendet, können Sie den Status dieser Elemente schnell und einfach in einem Cloud Spanner-Array festschreiben.

Dieses Beispiel zeigt eine alternative Definition für Singers, die mehrere Spalten des Typs ARRAY verwendet:

CREATE TABLE Singers (
  SingerId INT64,
  FeaturedSingerIds ARRAY<INT64>,
  SongNames ARRAY<STRING(MAX)>,
) PRIMARY KEY (SingerId) ...;

Hinweise:

  • Arrays mit dem Subtyp ARRAY (verschachtelte Arrays) werden nicht unterstützt.
  • Arrays können (wie skalare Werte) nie größer als insgesamt 10 MiB sein.
  • Arrays können nicht als Schlüsselspalten verwendet werden.
  • In einer CREATE TABLE-Anweisung können Sie Spalten vom Typ ARRAY mit einer NOT NULL-Anmerkung erstellen.

    Nach dem Erstellen der Tabelle können Sie keine Spalte vom Typ ARRAY mit der Anmerkung NOT NULL hinzufügen. Außerdem können Sie die Anmerkung NOT NULL keiner vorhandenen Spalte vom Typ ARRAY hinzufügen.

TABLE-Anweisungen

CREATE TABLE

Definiert eine neue Tabelle.

Syntax

CREATE TABLE table_name ( [
   { column_name data_type [ NOT NULL ] [AS ( expression ) STORED] [ options_def ]
   | table_constraint }
   [, ... ]
] ) PRIMARY KEY ( [column_name [ { ASC | DESC } ], ...] )
[, INTERLEAVE IN PARENT table_name [ ON DELETE { CASCADE | NO ACTION } ] ]

where data_type is:
    { scalar_type | array_type }

and options_def is:
    { OPTIONS ( allow_commit_timestamp = { true | null } ) }

and table_constraint is:
    [ CONSTRAINT constraint_name ]
    { CHECK ( expression ) |
      FOREIGN KEY ( column_name [, ... ] ) REFERENCES  ref_table  ( ref_column [, ... ] ) }

Beschreibung

CREATE TABLE definiert eine neue Tabelle in der aktuellen Datenbank.

Parameter

table_name

  • Der Name der zu erstellenden Tabelle. Eine Anleitung zur Benennung finden Sie unter Namenskonventionen.

column_name

  • Der Name der zu erstellenden Spalte. Eine Anleitung zur Benennung finden Sie unter Namenskonventionen.

data_type

  • Der Datentyp der Spalte. Dies kann ein TypSkalar oder ein Array sein.

NOT NULL

  • Diese optionale Spaltenannotation gibt an, dass die Spalte für alle Mutationen erforderlich ist, die neue Zeilen einfügen.

  • Sie können die Spalte NOT NULL nicht zu einer vorhandenen Tabelle hinzufügen. Bei den meisten Spaltentypen können Sie diese Einschränkung umgehen:

    • Für Spalten vom Typ ARRAY können Sie eine NOT NULL-Anmerkung nur verwenden, wenn Sie die Tabelle erstellen. Danach können Sie einer Spalte vom Typ ARRAY keine NOT NULL-Anmerkung hinzufügen.

    • Für alle anderen Spaltentypen können Sie eine Spalte mit Nullwert hinzufügen. Füllen Sie diese Spalte, indem Sie Werte in alle Zeilen schreiben. Aktualisieren Sie dann Ihr Schema mit einer NOT NULL-Anmerkung für diese Spalte.

AS ( expression ) STORED

  • Diese Klausel erstellt eine Spalte als generierte Spalte, also eine Spalte, deren Wert als Funktion anderer Spalten in derselben Zeile definiert ist.

  • expression kann ein beliebiger gültiger SQL-Ausdruck sein, der dem Datentyp der Spalte mit folgenden Einschränkungen zugewiesen werden kann.

  • Das Attribut STORED nach dem Ausdruck bewirkt, dass das Ergebnis der Funktion zusammen mit anderen Spalten der Tabelle gespeichert wird. Bei späteren Aktualisierungen einer der referenzierten Spalten wird der Ausdruck noch einmal ausgewertet und gespeichert.

  • Generierte Spalten ohne das Attribut STORED sind nicht zulässig.

  • Direkte Schreibvorgänge in generierte Spalten sind nicht zulässig.

  • Generierte Spalten können nicht als Primärschlüssel für einen Teil oder als Teil davon verwendet werden. Sie können jedoch sekundäre Indexschlüssel sein.

  • Die Spaltenoption allow_commit_timestamp ist für generierte Spalten und für Spalten, die von generierten Spalten referenziert werden, nicht zulässig.

  • Sie können den Datentyp einer generierten Spalte oder von der generierten Spalte referenzierte Spalten nicht ändern.

  • Sie können eine Spalte nicht löschen, auf die von einer generierten Spalte verwiesen wird.

Beispiele zum Arbeiten mit generierten Spalten finden Sie unter Generierte Spalten erstellen und verwalten.

PRIMARY KEY ( [column_name[ { ASC | DESC } ], ...]

  • Jede Tabelle muss einen Primärschlüssel haben und dieser Primärschlüssel kann aus null oder mehr Spalten dieser Tabelle bestehen.

  • Das Hinzufügen der Anmerkung DESC im Namen einer Primärschlüsselspalte ändert das physische Layout der Daten von der aufsteigenden Reihenfolge (Standard) in die absteigende Reihenfolge.

Weitere Informationen finden Sie unter Schema und Datenmodell.

[, INTERLEAVE IN PARENTtable_name[ ON DELETE { CASCADE | NO ACTION } ] ]

  • Diese Klausel definiert eine Untergeordnet/Übergeordnet-Tabellenbeziehung, die zu einer physischen Verschränkung von übergeordneten und untergeordneten Zeilen führt. Die Primärschlüsselspalten eines übergeordneten Elements müssen in der Positionierung von Name und Typ mit einem Präfix der Primärschlüsselspalten eines beliebigen untergeordneten Elements übereinstimmen. Das Hinzufügen von Zeilen zu einer untergeordneten Tabelle ist nur möglich, wenn die entsprechende übergeordnete Zeile existiert. Die übergeordnete Zeile kann entweder bereits in der Datenbank vorhanden sein oder vor der Einfügen der untergeordneten Zeilen in derselben Transaktion eingefügt werden.

  • Mit der optionalen Klausel ON DELETE wird das Verhalten von Zeilen in ChildTable definiert, wenn eine Mutation versucht, die übergeordnete Zeile zu löschen. Die folgenden Optionen werden unterstützt:

    • CASCADE: Die untergeordneten Zeilen werden gelöscht.

    • NO ACTION: Die untergeordneten Zeilen werden nicht gelöscht. Wenn nach dem Löschen eines übergeordneten Elements untergeordnete Zeilen zurückblieben und damit gegen die referenzielle Integrität zwischen übergeordneten und untergeordneten Elementen verstießen, schlüge der Schreibvorgang fehl.

    Sie können die Klausel ON DELETE weglassen. In diesem Fall wird die Standardeinstellung ON DELETE NO ACTION verwendet.

Weitere Informationen finden Sie unter Schema und Datenmodell.

CONSTRAINTconstraint_name

  • Ein optionaler Name für eine Tabelleneinschränkung. Wenn kein Name angegeben ist, generiert Cloud Spanner einen Namen für die Einschränkung. Einschränkungsnamen, einschließlich generierte Namen, können aus dem Informationsschema von Cloud Spanner abgefragt werden.

CHECK (expression)

  • Mit der Einschränkung CHECK können Sie festlegen, dass die Werte einer oder mehrerer Spalten einen booleschen Ausdruck erfüllen müssen.

  • expression kann ein beliebiger gültiger SQL-Ausdruck sein, der als BOOL ausgewertet wird.

  • Die folgenden Einschränkungen gelten für den expression-Begriff einer Diagnoseeinschränkung.

    • Der Ausdruck kann nur auf Spalten in derselben Tabelle verweisen.

    • Der Ausdruck muss mindestens auf eine nicht generierte Spalte verweisen, sei es direkt oder über eine generierte Spalte, die auf eine nicht generierte Spalte verweist.

    • Der Ausdruck kann nicht auf Spalten verweisen, für die die Option allow_commit_timestamp festgelegt wurde.

    • Der Ausdruck darf keine Unterabfragen enthalten.

    • Der Ausdruck darf keine nicht deterministischen Funktionen wie CURRENT_DATE() und CURRENT_TIMESTAMP() enthalten.

  • Weitere Informationen finden Sie unter Diagnoseeinschränkungen erstellen und verwalten.

FOREIGN KEY (column_name[, ... ] ) REFERENCESref_table(ref_column[, ... ] )

  • Verwenden Sie diese Klausel, um Fremdschlüsseleinschränkungen zu definieren. Fremdschlüssel werden in der verweisenden Tabelle der Beziehung definiert und verweisen auf die referenzierte Tabelle. Die Fremdschlüsselspalten der beiden Tabellen werden als verweisende und referenzierte Spalten bezeichnet. Ihre Zeilenwerte sind die Schlüssel.

  • Eine Fremdschlüsseleinschränkung erfordert, dass eine oder mehrere Spalten dieser Tabelle nur Werte enthalten, die in den referenzierten Spalten der referenzierten Tabelle enthalten sind.

  • Beim Erstellen eines Fremdschlüssels wird automatisch eine eindeutige Einschränkung für die referenzierte Tabelle erstellt, es sei denn, der gesamte Primärschlüssel wird referenziert. Wenn die eindeutige Einschränkung nicht erfüllt werden kann, schlägt die gesamte Schemaänderung fehl.

  • Die Anzahl der verweisenden und referenzierten Spalten muss identisch sein. Die Reihenfolge ist ebenfalls wichtig. Das heißt, die erste verweisende Spalte verweist auf die erste referenzierte Spalte, die zweite auf die zweite Spalte und so weiter.

  • Die referenzierenden und referenzierten Spalten müssen übereinstimmende Typen haben und der Gleichheitsoperator ('=') müssen unterstützt werden. Die Spalten müssen ebenfalls indexierbar sein. Spalten vom Typ ARRAY und NUMERIC sind nicht zulässig.

  • Fremdschlüssel können nicht für Spalten mit der Option allow_commit_timestamp=true erstellt werden.

Weitere Informationen finden Sie unter Fremdschlüssel.

OPTIONS ( allow_commit_timestamp = { true | null } )

  • Mit der Option allow_commit_timestamp kann Cloud Spanner bei Insert- und Update-Vorgängen den Commit-Zeitstempel der Transaktion in die Spalte schreiben. Weitere Informationen finden Sie unter Commit-Zeitstempel.

ALTER TABLE

Ändert die Definition einer Tabelle.

Syntax

ALTER TABLE table_name
    action [, ... ]

where action is:
    ADD [ COLUMN  ] column_name data_type [ NOT NULL]  [AS ( expression ) STORED] [ options_def ]
    DROP [ COLUMN ] column_name
    ADD table_constraint
    DROP CONSTRAINT constraint_name
    SET ON DELETE { CASCADE | NO ACTION }
    ALTER [ COLUMN ] column_name { { data_type } [ NOT NULL ] | SET [ options_def ] }

and data_type is:
    { scalar_type | array_type }

and options_def is:
    { OPTIONS (allow_commit_timestamp = { true | null } ) }

and table_constraint is:
    [ CONSTRAINT constraint_name ]
    { CHECK ( expression ) |
      FOREIGN KEY ( column_name [, ... ] ) REFERENCES ref_table ( ref_column [, ... ] ) }

Beschreibung

ALTER TABLE ändert die Definition einer vorhandenen Tabelle.

ADD COLUMN

  • Fügt der Tabelle eine neue Spalte mit derselben Syntax wie CREATE TABLE hinzu.

DROP COLUMN

  • Löscht eine Spalte aus einer Tabelle.

  • Sie können eine Spalte nicht löschen, auf die von einer generierten Spalte verwiesen wird.

  • Das Löschen einer Spalte, auf die eine CHECK-Einschränkung verweist, ist nicht zulässig.

ADDtable_constraint

  • Fügt einer Tabelle eine neue Einschränkung hinzu, die dieselbe Syntax wie CREATE TABLE verwendet.

  • Bei Fremdschlüsseln werden die vorhandenen Daten validiert, bevor der Fremdschlüssel hinzugefügt wird. Wenn ein vorhandener eingeschränkter Schlüssel keinen entsprechenden referenzierten Schlüssel hat oder der referenzierte Schlüssel nicht eindeutig ist, verstößt er gegen die Einschränkung und die Anweisung ALTER schlägt fehl.

  • Bei CHECK-Einschränkungen werden neue Daten sofort gegen die Einschränkung validiert. Ein zeitaufwendiger Prozess wird ebenfalls gestartet, um die vorhandenen Daten anhand der Einschränkung zu validieren. Wenn vorhandene Daten nicht der Einschränkung entsprechen, wird die Diagnoseeinschränkung zurückgesetzt.

  • Die folgenden Einschränkungen gelten für den expression-Begriff einer Diagnoseeinschränkung.

    • Der Ausdruck kann nur auf Spalten in derselben Tabelle verweisen.

    • Der Ausdruck muss mindestens auf eine nicht generierte Spalte verweisen, sei es direkt oder über eine generierte Spalte, die auf eine nicht generierte Spalte verweist.

    • Der Ausdruck kann nicht auf Spalten verweisen, für die die Option allow_commit_timestamp festgelegt wurde.

    • Der Ausdruck darf keine Unterabfragen enthalten.

    • Der Ausdruck darf keine nicht deterministischen Funktionen wie CURRENT_DATE() und CURRENT_TIMESTAMP() enthalten.

DROP CONSTRAINTconstraint_name

  • Löscht die angegebene Einschränkung für eine Tabelle zusammen mit einem zugehörigen Index, falls zutreffend.

SET ON DELETE { CASCADE | NO ACTION }

  • Diese Änderung kann nur auf untergeordnete Tabellen von übergeordneten und untergeordneten Tabellen angewendet werden. Weitere Informationen finden Sie unter Schema und Datenmodell.

  • Die ON DELETE CASCADE-Klausel bedeutet, dass beim Löschen einer Zeile der übergeordneten Tabelle die Zeile der entsprechenden untergeordneten Tabelle automatisch ebenfalls gelöscht wird. Untergeordnete Zeilen sind alle Zeilen, die mit demselben Primärschlüssel beginnen. Wenn eine untergeordnete Tabelle diese Annotation nicht enthält oder die Annotation ON DELETE NO ACTION lautet, müssen Sie die untergeordneten Zeilen löschen, bevor Sie die übergeordnete Zeile löschen können.

ALTER COLUMN

  • Ändert die Definition einer vorhandenen Spalte in einer Tabelle.

Parameter

table_name

  • Der Name einer vorhandenen Tabelle, die geändert werden soll.

column_name

  • Der Name einer neuen oder vorhandenen Spalte. Sie können die Schlüsselspalten einer Tabelle nicht ändern.

data_type

  • Datentyp der neuen Spalte oder neuer Datentyp für eine vorhandene Spalte.

  • Sie können den Datentyp einer generierten Spalte oder von der generierten Spalte referenzierte Spalten nicht ändern.

  • Das Ändern des Datentyps ist in Spalten, auf die in einer CHECK-Einschränkung verwiesen wird, nicht zulässig. options_def

  • Mit der Option (allow_commit_timestamp=true) kann Cloud Spanner bei Insert- und Update-Vorgängen den Commit-Zeitstempel der Transaktion in die Spalte schreiben. Weitere Informationen finden Sie unter Commit-Zeitstempel.

table_constraint

  • Neue Tabelleneinschränkung für die Tabelle.

constraint_name

  • Der Name einer neuen oder vorhandenen Einschränkung.

ref_table

  • Die referenzierte Tabelle einer Fremdschlüsseleinschränkung.

ref_column

  • Die referenzierte Spalte in einer Fremdschlüsseleinschränkung.

DROP TABLE

Entfernt eine Tabelle.

Syntax

DROP TABLE table_name

Beschreibung

Mit der Anweisung DROP TABLE entfernen Sie Tabellen aus der Datenbank.

  • DROP TABLE kann nicht wiederhergestellt werden.

  • Eine Tabelle kann nicht gelöscht werden, wenn Indexe für sie vorhanden sind oder sie verschränkte Tabellen oder Indexe enthält.

  • Eine DROP TABLE-Anweisung löscht automatisch die Fremdschlüssel der Tabelle und die Sicherungsindexe der Fremdschlüssel.

Parameter

table_name

  • Der Name der zu löschenden Tabelle.

INDEX-Anweisungen

CREATE INDEX

Verwenden Sie die Anweisung CREATE INDEX, um sekundäre Indexe zu definieren.

Syntax

CREATE [ UNIQUE ] [ NULL_FILTERED ] INDEX index_name
ON table_name ( key_part [, ...] ) [ storing_clause ] [ , interleave_clause ]

where index_name is:
    {a—z|A—Z}[{a—z|A—Z|0—9|_}+]

and key_part is:
    column_name [ { ASC | DESC } ]

and storing_clause is:
    STORING ( column_name [, ...] )

and interleave_clause is:
    INTERLEAVE IN table_name

Beschreibung

Cloud Spanner indexiert automatisch die Primärschlüsselspalten aller Tabellen.

Sie können CREATE INDEX zum Erstellen sekundärer Indexe für andere Spalten verwenden. Wenn Sie einen sekundären Index für eine Spalte hinzufügen, können Sie Daten in dieser Spalte effizienter nachschlagen. Weitere Informationen finden Sie unter Sekundäre Indexe.

Parameter

UNIQUE

  • Gibt an, dass dieser sekundäre Index eine Einschränkung UNIQUE für die Daten erzwingt, die indexiert werden. Die Einschränkung UNIQUE bewirkt, dass zu einem doppelten Indexschlüssel führende Transaktionen abgelehnt werden. Weitere Informationen finden Sie im Abschnitt Eindeutige Indexe.

NULL_FILTERED

  • Gibt an, dass dieser sekundäre Index keine NULL-Werte indexiert. Weitere Informationen finden Sie unter Indexierung von NULL-Werten.

index_name

  • Der Name des zu erstellenden Index. Eine Anleitung zur Benennung finden Sie unter Namenskonventionen.

table_name

  • Der Name der zu indexierenden Tabelle.

INTERLEAVE IN

  • Definiert eine Tabelle, in der der Index verschränkt werden kann. Wenn T die Tabelle ist, in die der Index verschränkt wird, dann gilt:

    • T muss ein übergeordnetes Element der Tabelle sein, die indexiert wird, und
    • der Primärschlüssel von T muss das Schlüsselpräfix des Index sein.

    Wann sollten Sie einen verschachtelten Index erstellen? Wenn der für Indexoperationen zu verwendende Indexschlüssel mit dem Schlüssel einer Tabelle übereinstimmt, kann es hilfreich sein, den Index in dieser Tabelle zu verschachteln, sofern die Tabellenzeile eine Daten/Lokalität-Beziehung mit den entsprechenden indexierten Zeilen haben soll.

    Wenn Sie beispielsweise alle Zeilen mit Songs für eine bestimmte Zeile mit Singers indexieren möchten, enthält Ihr Index SingerId und SongName. In diesem Fall wäre der Index ein guter Kandidat für die Verschachtelung in Singers, wenn Sie häufig Informationen zu einem Sänger und zugleich die Songs dieses Sängers aus dem Index abrufen. Die Definition von SongsBySingerSongName im Abschnitt Sekundären Index erstellen ist ein Beispiel für das Erstellen eines solchen verschachtelten Index.

    Wie bei verschachtelten Tabellen werden Einträge in verschachtelten Indexen jeweils zusammen mit der entsprechenden Zeile der übergeordneten Tabelle gespeichert. Weitere Informationen finden Sie im Abschnitt Datenbankaufteilungen.

DESC

  • Definiert die absteigende Suchreihenfolge für die entsprechende Indexspalte. Beim Scannen einer Tabelle unter Verwendung einer Indexspalte mit der Markierung DESC werden die gescannten Zeilen in absteigender Reihenfolge in Relation zu dieser Indexspalte aufgelistet. Wenn Sie keine Sortierreihenfolge angeben, wird standardmäßig die aufsteigende Reihenfolge (ASC) verwendet.

STORING

  • Stellt einen Mechanismus zum Duplizieren von Daten aus der Tabelle in einen oder mehrere sekundäre Indexe in dieser Tabelle bereit. Dies erfordert zwar zusätzlichen Speicherplatz, aber es kann die Leselatenz bei der Datensuche über einen sekundären Index verbessern. Dann ist es nämlich nicht notwendig, dass Daten aus der Haupttabelle abgerufen werden, wenn die gewünschten Einträge im Index gefunden werden. Ein entsprechendes Beispiel finden Sie im Abschnitt STORING-Klausel.

DROP INDEX

Entfernt einen sekundären Index.

Syntax

DROP INDEX index_name

Beschreibung

Mit der Anweisung DROP INDEX löschen Sie einen sekundären Index.

Parameter

index_name

  • Der Name des zu löschenden Index.

Folgende Regeln gelten für Datenbank-IDs.

  • Muss mit einem Kleinbuchstaben beginnen.
  • Sie dürfen Kleinbuchstaben, Zahlen, Unterstriche und Bindestriche enthalten, jedoch keine Großbuchstaben.
  • Sie dürfen nicht mit einem Unterstrich oder Bindestrich enden.
  • Sie müssen in Graviszeichen (`) eingeschlossen sein, wenn es sich um ein reserviertes Wort handelt oder ein Bindestrich enthalten ist.
  • Sie können 2 bis 30 Zeichen lang sein.
  • Sie können nach dem Erstellen nicht mehr geändert werden.