Datendefinitionssprache (Google Standard SQL)

Verwenden Sie die Datendefinitionssprache (DDL) von Google Standard-SQL für Folgendes:

  • 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
  • Ansichten in einer Datenbank erstellen, ersetzen oder löschen.

DDL-Syntax

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

create_database:
    CREATE DATABASE database_id

alter_database:
    ALTER DATABASE database_id
    action

where action is:
    SET OPTIONS ( options_def [, ... ] )

and options_def is:
    { default_leader = { 'region' | null } |
      optimizer_version = { 1 ... 3 | null } |
      optimizer_statistics_package = { 'package_name' | null } |
      version_retention_period = { 'duration' | null } }

create_table:
    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 } ] ]
    [, ROW DELETION POLICY ( OLDER_THAN ( timestamp_column, INTERVAL num_days DAY ) ) ]

    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

create_view:
    { CREATE VIEW | CREATE OR REPLACE VIEW } view_name
    SQL SECURITY INVOKER
    AS query

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 ] }
        ADD ROW DELETION POLICY ( OLDER_THAN ( timestamp_column, INTERVAL num_days DAY ))
        DROP ROW DELETION POLICY
        REPLACE ROW DELETION POLICY ( OLDER_THAN ( timestamp_column, INTERVAL num_days DAY ))

    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

drop_view:
    DROP VIEW view_name

alter_statistics:
    ALTER STATISTICS package_name

scalar_type:
    { BOOL | INT64 | FLOAT64 | NUMERIC | STRING( length ) | JSON | 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, view_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 haben in der Google Standard-SQL-Sprache eine besondere Bedeutung und sind in ihrer DDL reserviert. Wenn Sie ein reserviertes Keyword als Kennung in Ihrem Schema verwenden müssen, schließen Sie es in Graviszeichen (`) ein. Eine vollständige Liste der reservierten Schlüsselwörter in Google Standard-SQL finden Sie unter Lexikalische Standard-SQL-Struktur und Syntax.

Beispiel:

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

Namenskonventionen

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

Folgende Regeln gelten fürTisch .Spalte .Index .anzeigen undEinschränkung Namen.

  • Muss mindestens 1 Zeichen enthalten.

  • Darf maximal 128 Zeichen enthalten.

  • 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 Schemaobjektnamen wird in SQL-Abfragen 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 Google Standard-SQL-Datenbank müssen Sie eine CREATE DATABASE-Anweisung angeben, 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 ( options_def [, ... ] )

and options_def is:
    { default_leader = { 'region' | null } |
      optimizer_version = { 1 ... 3 | null } |
      optimizer_statistics_package = { 'package_name' | 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 ... 3 | null } können Sie die zu verwendende Abfrageoptimierungsversion angeben. Wenn Sie diese Option auf null festlegen, entspricht dies der Standardversion. Weitere Informationen finden Sie unter Abfrageoptimierung.

  • Mit der Option optimizer_statistics_package = { 'package_name' | null } können Sie den zu verwendenden Statistiknamen der Statistik der Abfrageoptimierung angeben. Standardmäßig ist dies das neueste erfasste Statistikpaket. Sie können jedoch jede verfügbare Statistikpaketversion angeben. Wenn Sie diese Option auf null festlegen, entspricht dies der aktuellen Version. Weitere Informationen finden Sie unter Versionsverwaltung von Abfragestatistiken.

  • 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. Bei der Einstellung null auf die Standardeinstellung wird die Aufbewahrungsdauer auf eine Stunde zurückgesetzt. Diese Option kann für die Wiederherstellung zu einem bestimmten Zeitpunkt verwendet werden. Weitere Informationen finden Sie unter Wiederherstellung zu einem bestimmten Zeitpunkt.

  • Mit default_leader = { 'region' | null } wird die Leader-Region für Ihre Datenbank festgelegt. Sie können diesen Parameter nur für Datenbanken verwenden, die eine multiregionale Konfiguration verwenden. default_leader muss auf null oder eines der nicht schreibgeschützten Replikate in Ihrer multiregionalen Konfiguration festgelegt sein. null setzt die Leader-Region für die multiregionale Konfiguration Ihrer Datenbank auf die Standard-Leader-Region zurück. Weitere Informationen finden Sie unter Standard-Leader-Region konfigurieren.

Datentypen

Skalare

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

{
  BOOL
  | INT64
  | FLOAT64
  | NUMERIC
  | STRING( length )
  | JSON
  | 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 die 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 des gespeicherten Strings wirkt sich auf die Speicherkosten aus. Wenn Sie MAX angeben, wird keine zusätzliche Speicherkapazität verwendet.

  • In Google Standard-SQL müssen Unicode-Strings beim Empfang auf dem Server UTF-8-codiert sein.

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

JSON

JSON ist ein Unicode-Zeichenstring mit variabler Länge, der ein JSON-Objekt darstellt. Der String muss bei Empfang auf dem Server in UTF-8 codiert sein. Die maximale Länge des JSON-Werts beträgt 262.1440 Zeichen.

Weitere Informationen finden Sie unter Mit JSON arbeiten und unter Datentypen.

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 die 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 verwendet.

  • 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

  • Zeitstempel mit einer Genauigkeit im Nanosekundenbereich.
  • 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 >

Google Standard-SQL unterstützt Arrays aus Skalaren. 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 wiederkehrende Felder verwendet, können Sie deren Zustand in einem Google-Standard-SQL-Array beibehalten.

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 } ] ]
[, ROW DELETION POLICY ( OLDER_THAN ( timestamp_column, INTERVAL num_days DAY ) ) ]

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.

timestamp_column

  • Der Name einer Spalte vom Typ TIMESTAMP, die auch in der CREATE TABLE-Anweisung angegeben ist.

num_days

  • Die Anzahl der Tage nach dem Datum im angegebenen timestamp_column, nach denen die Zeile zum Löschen markiert wird. Gültige Werte sind nicht negative Ganzzahlen.

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

[, ROW DELETION POLICY ( OLDER_THAN (timestamp_column, INTERVALnum_daysDAY ) ) ]

  • Mit dieser Klausel können Sie eine Richtlinie zum Löschen von Zeilen für diese Tabelle festlegen. Weitere Informationen finden Sie unter Gültigkeitsdauer (TTL).

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 ] }
    ADD ROW DELETION POLICY ( OLDER_THAN ( timestamp_column, INTERVAL num_days DAY ))
    DROP ROW DELETION POLICY
    REPLACE ROW DELETION POLICY ( OLDER_THAN ( timestamp_column, INTERVAL num_days DAY ))

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.

ADD ROW DELETION POLICY ( OLDER_THAN (timestamp_column, INTERVALnum_daysDAY ) )

  • Fügt der Tabelle eine Richtlinie zum Löschen von Zeilen hinzu, die die Zeitspanne nach einem bestimmten Datum definiert, nach dem eine Zeile gelöscht wird. Siehe Gültigkeitsdauer. Es kann immer nur eine Zeile-Löschrichtlinie für eine Tabelle vorhanden sein.

DROP ROW DELETION POLICY

  • Löscht die Zeilenlöschrichtlinie für eine Tabelle.

REPLACE ROW DELETION POLICY ( OLDER_THAN (timestamp_column, INTERVALnum_daysDAY ) )

  • Ersetzt die vorhandene Richtlinie zum Löschen von Zeilen durch eine neue Richtlinie.

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.

STATISTICS-Anweisungen

ALTER STATISTIK

Ändert die Definition eines Statistikpakets der Abfrageoptimierung

Syntax

ALTER STATISTICS package_name
    action

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

and action is:
    SET OPTIONS ( options_def )

and options_def is:
    { allow_gc = { true | false } }

Beschreibung

ALTER STATISTICS ändert die Definition eines Statistikpakets der Abfrageoptimierung.

SET OPTIONS

  • Mit dieser Klausel können Sie eine Option für das angegebene Statistikpaket festlegen.

Parameter

package_name

  • Der Name eines vorhandenen Statistikpakets der Abfrageoptimierung, dessen Attribute geändert werden sollen.

    So rufen Sie vorhandene Statistikpakete ab:

    SELECT s.package_name AS package_name, s.allow_gc AS allow_gc FROM INFORMATION_SCHEMA.SPANNER_STATISTICS s;

options_def

  • Mit der Option allow_gc = { true | false } können Sie angeben, ob für ein bestimmtes Statistikpaket eine automatische Speicherbereinigung durchgeführt wird. Ein Paket muss als allow_gc=false festgelegt sein, wenn es in einem Abfragehinweis verwendet wird. Weitere Informationen finden Sie unter Garage Sammlung von Statistikpaketen.

Kontoauszüge anzeigen

VIEW ERSTELLEN und VIEW ERSTELLEN ODER ERSETZEN

Mit der Anweisung CREATE VIEW oder CREATE OR REPLACE VIEW definieren Sie eine Ansicht.

Syntax

{ CREATE VIEW | CREATE OR REPLACE VIEW } view_name
SQL SECURITY INVOKER
AS query

Beschreibung

CREATE VIEW definiert eine neue Ansicht in der aktuellen Datenbank. Wenn eine Ansicht mit dem Namen view_name bereits vorhanden ist, schlägt die Anweisung CREATE VIEW fehl.

CREATE OR REPLACE VIEW definiert eine neue Ansicht in der aktuellen Datenbank. Wenn bereits eine Ansicht mit dem Namen view_name vorhanden ist, wird ihre Definition ersetzt.

Parameter

view_name

  • Der Name der Ansicht, die erstellt werden soll. Eine Anleitung zur Benennung finden Sie unter Namenskonventionen.

SQL SECURITY INVOKER

  • Gibt an, dass bei Verwendung der Ansicht in einer Abfrage die in der Ansicht referenzierten Objekte mit den Anmeldedaten des Nutzers abgeglichen werden, der die Abfrage aufgerufen hat. Dies ist die einzige SQL-Sicherheitsoption in Google Standard-SQL.

AS query

  • Die Abfrage, die den Inhalt der Ansicht definiert.

    Weitere Informationen zum Erstellen einer Abfrage finden Sie unter Abfragesyntax.

DROP VIEW

Entfernt eine Ansicht.

Syntax

DROP VIEW view_name

Beschreibung

Mit der Anweisung DROP VIEW können Sie eine Ansicht aus der Datenbank entfernen.

Parameter

view_name

  • Der Name der Ansicht, die gelöscht werden soll.