View a markdown version of this page

CREATE TABLE - Amazon Aurora DSQL

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

CREATE TABLE

CREATE TABLE definiert eine neue Tabelle.

Unterstützte Syntax

CREATE TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters | PRIMARY KEY index_parameters | REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH FULL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] and referential_action in a FOREIGN KEY/REFERENCES constraint is: { NO ACTION | RESTRICT | CASCADE | SET NULL [ ( column_name [, ... ] ) ] | SET DEFAULT [ ( column_name [, ... ] ) ] } and like_option is: { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL } index_parameters in UNIQUE and PRIMARY KEY constraints are: [ INCLUDE ( column_name [, ... ] ) ]

Identitätsspalten

Anmerkung

Bei der Verwendung von Identitätsspalten sollte der Cache-Wert sorgfältig abgewogen werden. Weitere Informationen finden Sie im Callout Wichtig auf der CREATE SEQUENCE Seite.

Hinweise zur optimalen Verwendung von Identitätsspalten auf der Grundlage von Workload-Mustern finden Sie unterArbeiten mit Sequenzen und Identitätsspalten.

Die GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options ) Klausel erstellt die Spalte als Identitätsspalte. Ihr wird eine implizite Sequenz angehängt, und in neu eingefügten Zeilen enthält die Spalte automatisch Werte aus der ihr zugewiesenen Sequenz. Eine solche Spalte ist implizit. NOT NULL

Die Klauseln ALWAYS und BY DEFAULT legen fest, wie explizit benutzerdefinierte Werte in INSERT den Befehlen und behandelt werden. UPDATE

Wenn ein INSERT Befehl ausgewählt ALWAYS ist, wird ein benutzerdefinierter Wert nur akzeptiert, wenn in der INSERT Anweisung Folgendes angegeben ist. OVERRIDING SYSTEM VALUE Wenn ausgewählt BY DEFAULT ist, hat der vom Benutzer angegebene Wert Vorrang.

Wenn in einem UPDATE Befehl ausgewählt ALWAYS ist, wird jede Aktualisierung der Spalte auf einen anderen Wert als DEFAULT abgelehnt. Wenn diese Option ausgewählt BY DEFAULT ist, kann die Spalte normal aktualisiert werden. (Für den UPDATE Befehl gibt es keine OVERRIDING Klausel.)

Die sequence_options Klausel kann verwendet werden, um die Parameter der Sequenz zu überschreiben. Zu den verfügbaren Optionen gehören die Optionen, die fürCREATE SEQUENCE, plus angezeigt SEQUENCE NAME name werden. Ohne SEQUENCE NAME Angabe wählt das System einen unbenutzten Namen für die Sequenz.

Speichermodus

Die optionale STORAGE Klausel legt den Speichermodus für die Spalte fest. Verwenden Sie diese Optionen, um das Komprimierungsverhalten für Datentypen mit variabler Länge wieJSON, JSONBTEXT, VARCHAR und zu steuern. BPCHAR

Amazon Aurora DSQL komprimiert einige Datentypen, wenn sie eine bestimmte Größe überschreiten. Verwenden Sie die Optionen PLAIN oderEXTERNAL, um dieses Verhalten zu deaktivieren.

PLAIN

Aurora DSQL speichert Daten inline ohne Komprimierung. Dies ist die einzige Option für Datentypen mit fester Länge wie. integer Verwenden Sie diese Option, um die Komprimierung für einige Typen mit variabler Länge zu deaktivieren.

MAIN | EXTENDED | DEFAULT

MAINund EXTENDED ermöglichen die optionale Komprimierung der Spalte, wenn der zugrunde liegende Datentyp die Komprimierung unterstützt. DEFAULTsetzt den Speichermodus auf den Standardmodus für den Datentyp der Spalte.

EXTERNAL

Aurora DSQL unterstützt derzeit keine TOAST-Tabellen, EXTERNAL deaktiviert jedoch die Komprimierung von Datentypen, die Komprimierung unterstützen.

Einschränkungen bei Fremdschlüsseln

Die REFERENCES FOREIGN KEY UND-Klauseln spezifizieren eine Fremdschlüsseleinschränkung, die vorschreibt, dass eine Gruppe von einer oder mehreren Spalten der neuen Tabelle nur Werte enthalten darf, die den Werten in den referenzierten Spalten einer Zeile der referenzierten Tabelle entsprechen. Wenn Sie die refcolumn Liste weglassen, verwendet Aurora DSQL den Primärschlüssel von. reftable Andernfalls muss sich die refcolumn Liste auf die Spalten einer eindeutigen oder primären Schlüsseleinschränkung beziehen, die nicht aufschiebbar ist.

Aurora DSQL vergleicht einen Wert, der in die referenzierende (n) Spalte (n) eingefügt wurde, mit den Werten der referenzierten Tabelle und der referenzierten Spalten unter Verwendung des angegebenen Vergleichstyps. Es gibt zwei unterstützte Vergleichstypen: MATCH FULL und MATCH SIMPLE (was die Standardeinstellung ist).

Sie können einen Fremdschlüssel entweder als Spalteneinschränkung oder als Tabelleneinschränkung definieren:

  • Spalteneinschränkung (REFERENCES) — Wird REFERENCES nach dem Spaltendatentyp für einspaltige Fremdschlüssel verwendet.

  • Tabelleneinschränkung (FOREIGN KEY) — Wird FOREIGN KEY (...) REFERENCES ... für einspaltige oder mehrspaltige Fremdschlüssel verwendet.

Referenzielle Aktionen

Wenn Sie Daten in den referenzierten Spalten ändern, führt Aurora DSQL Aktionen für die Daten in den Spalten der referenzierenden Tabelle aus. Die ON DELETE Klausel gibt die Aktion an, die ausgeführt werden soll, wenn eine Transaktion eine referenzierte Zeile in der referenzierten Tabelle löscht. Ebenso gibt die ON UPDATE Klausel die Aktion an, die ausgeführt werden soll, wenn eine Transaktion eine referenzierte Spalte auf einen neuen Wert aktualisiert. Wenn eine Transaktion die Zeile aktualisiert, die referenzierte Spalte jedoch nicht ändert, ergreift Aurora DSQL keine Maßnahmen.

Aurora DSQL unterstützt die folgenden referentiellen Aktionen:

NO ACTION (Standard)

Erzeugt einen Fehler, wenn das Löschen oder Aktualisieren zu einer Verletzung der Fremdschlüsseleinschränkung führen würde. Wenn die Einschränkung zurückgestellt wird, gibt Aurora DSQL diesen Fehler bei der Überprüfung der Beschränkung aus, falls noch referenzierende Zeilen existieren. Dies ist die Standardaktion.

RESTRICT

Erzeugt einen Fehler, wenn eine zu löschende oder zu aktualisierende Zeile mit einer Zeile in der referenzierenden Tabelle übereinstimmt. Dadurch wird die Aktion auch dann verhindert, wenn der Status nach der Aktion nicht gegen die Fremdschlüsseleinschränkung verstoßen würde. Insbesondere verhindert es, dass Zeilen, auf die verwiesen wird, auf Werte aktualisiert werden, die zwar unterschiedlich sind, aber im Vergleich gleich sind. Im NO ACTION Gegensatz dazu kann die RESTRICT Prüfung nicht verschoben werden.

Kaskadierende Aktionen werden auf die Limits für Transaktionsänderungen angerechnet

Die SET DEFAULT Aktionen CASCADESET NULL, und ändern automatisch Zeilen in der referenzierenden Tabelle, wenn eine referenzierte Zeile aktualisiert oder gelöscht wird. Das Zeilenlimit für Aurora-DSQL-Transaktionen gilt für diese Aktionen und kann zu unerwarteten Fehlern führen, wenn es nicht sorgfältig verwendet wird. Bevorzugen Sie NO ACTION oder RESTRICT für Fremdschlüsselbeziehungen, bei denen die Kardinalität untergeordneter Zeilen unbegrenzt oder unvorhersehbar ist. Weitere Informationen finden Sie unter Datenbanklimits in Aurora DSQL.

CASCADE

Löschen Sie alle Zeilen, die auf die gelöschte Zeile verweisen, oder aktualisieren Sie die Werte der referenzierenden Spalte (n) auf die neuen Werte der referenzierten Spalten.

SET NULL [ ( column_name [, ... ] ) ]

Setzen Sie alle referenzierenden Spalten oder eine angegebene Teilmenge der referenzierenden Spalten auf Null. Eine Teilmenge der Spalten kann nur für Aktionen angegeben werden. ON DELETE

SET DEFAULT [ ( column_name [, ... ] ) ]

Setzt alle referenzierenden Spalten oder eine bestimmte Teilmenge der referenzierenden Spalten auf ihre Standardwerte. Eine Teilmenge von Spalten kann nur für Aktionen angegeben werden. ON DELETE (Die referenzierte Tabelle muss eine Zeile enthalten, die den Standardwerten entspricht, wenn sie nicht Null sind, sonst schlägt der Vorgang fehl.)

Typen abgleichen

Aurora DSQL unterstützt die folgenden Match-Typen:

MATCH SIMPLE (Standard)

Erlaubt, dass jede der Fremdschlüsselspalten Null ist. Wenn eine von ihnen Null ist, muss die Zeile in der referenzierten Tabelle keine Übereinstimmung aufweisen.

MATCH FULL

Erlaubt nicht, dass eine Spalte eines mehrspaltigen Fremdschlüssels Null ist, es sei denn, alle Fremdschlüsselspalten sind Null. Wenn sie alle Null sind, muss die Zeile in der Tabelle, auf die verwiesen wird, keine Übereinstimmung aufweisen.

Sie können NOT NULL Einschränkungen auf die referenzierenden Spalten anwenden, um zu verhindern, dass diese Fälle auftreten.

Aufschiebbarkeit

Sie können steuern, wann eine Fremdschlüsseleinschränkung überprüft wird, indem Sie ihre Verschiebbarkeit angeben:

NOT DEFERRABLE (Standard)

Aurora DSQL überprüft diese Einschränkung unmittelbar nach jeder Anweisung. Sie können es nicht in „Aufgeschoben mit“ ändern. SET CONSTRAINTS

DEFERRABLE

Die Beschränkung kann bis zum Ende der Transaktion verschoben werden, indem Sie Folgendes verwenden. SET CONSTRAINTS Ohne eine INITIALLY Klausel ist die Standardeinstellung auf. INITIALLY IMMEDIATE

DEFERRABLE INITIALLY IMMEDIATE

Standardmäßig überprüft Aurora DSQL diese Einschränkung nach jeder Anweisung, aber Sie können sie innerhalb einer Transaktion verschieben, indem Sie Folgendes verwenden. SET CONSTRAINTS ... DEFERRED

DEFERRABLE INITIALLY DEFERRED

Standardmäßig überprüft Aurora DSQL diese Einschränkung beim Commit der Transaktion. Sie können sie innerhalb einer Transaktion auf „Sofort“ ändern, indem Sie Folgendes verwendenSET CONSTRAINTS ... IMMEDIATE.

Weitere Hinweise zum Ändern des Timings von Constraint-Checks innerhalb einer Transaktion finden Sie unterSET CONSTRAINTS.

Nur Fremdschlüssel-Einschränkungen

In Aurora DSQL gilt die DEFERRABLE Option nur für Fremdschlüsseleinschränkungen.

Beispiele für Fremdschlüsseleinschränkungen

Angenommen, Sie haben eine Tabelle, in der Produkte gespeichert sind:

CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric );

Jetzt möchten Sie eine Tabelle, in der Bestellungen dieser Produkte gespeichert sind. Sie möchten sicherstellen, dass die Bestelltabelle Verweise auf tatsächlich existierende Produkte enthält. Definieren Sie eine Fremdschlüsseleinschränkung in der Bestelltabelle, die auf die Produkttabelle verweist:

CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products (product_no), quantity integer );

Jetzt können Sie keine Bestellungen mit product_no Einträgen erstellen, die ungleich NULL sind und die nicht in der Produkttabelle erscheinen.

In diesem Fall ist die Bestelltabelle die Referenztabelle und die Produkttabelle die referenzierte Tabelle. Ebenso gibt es referenzierende und referenzierte Spalten.

Sie können den obigen Befehl wie folgt verkürzen:

CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products, quantity integer );

Wenn Sie die Spaltenliste weglassen, verwendet Aurora DSQL den Primärschlüssel der referenzierten Tabelle als referenzierte (n) Spalte (n).

Sie können einer Fremdschlüsseleinschränkung auf die übliche Weise Ihren eigenen Namen zuweisen:

CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer CONSTRAINT fk_product REFERENCES products, quantity integer );

Ein Fremdschlüssel kann auch eine Gruppe von Spalten einschränken und auf sie verweisen. Er muss dann in Form von Tabelleneinschränkungen geschrieben werden:

CREATE TABLE inventory ( warehouse_id integer, product_no integer, quantity integer, PRIMARY KEY (warehouse_id, product_no) ); CREATE TABLE shipments ( shipment_id integer PRIMARY KEY, warehouse_id integer, product_no integer, FOREIGN KEY (warehouse_id, product_no) REFERENCES inventory (warehouse_id, product_no) );

Die Anzahl und der Typ der eingeschränkten Spalten müssen mit der Anzahl und den Typen der Spalten, auf die verwiesen wird, kompatibel sein.

Eine Tabelle kann mehr als eine Fremdschlüsseleinschränkung haben. Dies wird verwendet, um Viele-zu-Viele-Beziehungen zwischen Tabellen zu implementieren:

CREATE TABLE order_items ( product_no integer REFERENCES products, order_id integer REFERENCES orders, quantity integer, PRIMARY KEY (product_no, order_id) );

Eine Fremdschlüsseleinschränkung kann auf dieselbe Tabelle verweisen, zu der sie gehört. Dies wird als selbstreferentieller Fremdschlüssel bezeichnet. Wenn Sie beispielsweise möchten, dass Zeilen einer Tabelle Knoten einer Baumstruktur darstellen, könnten Sie schreiben:

CREATE TABLE tree ( node_id integer PRIMARY KEY, parent_id integer REFERENCES tree, name text );

Ein Knoten der obersten Ebene hätte NULLparent_id, während parent_id Einträge, die nicht NULL sind, darauf beschränkt sind, gültige Zeilen der Tabelle zu referenzieren.

Sie können referenzielle Aktionen angeben, um zu steuern, was passiert, wenn eine Zeile, auf die verwiesen wird, gelöscht oder aktualisiert wird. Das folgende Beispiel wird verwendetON DELETE RESTRICT, um das Löschen eines Produkts zu verhindern, auf das in einer Bestellung immer noch verwiesen wird:

CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products ON DELETE RESTRICT, quantity integer );

Bei dem VersuchRESTRICT, ein Produkt zu löschen, auf das Bestellungen verweisen, wird sofort ein Fehler ausgegeben. In der Standardeinstellung NO ACTION kann die Prüfung bis zum Ende der Transaktion verschoben werden, wenn die Einschränkung deklariert ist. DEFERRABLE

Verwenden Sie die Option, um einen Fremdschlüssel zu erstellen, der bis zum Ende einer Transaktion verschoben werden kann. DEFERRABLE Dies ist nützlich, wenn Sie unabhängig von der Reihenfolge Zeilen in beide Tabellen innerhalb derselben Transaktion einfügen müssen:

CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products DEFERRABLE INITIALLY DEFERRED, quantity integer );

Bei DEFERRABLE INITIALLY DEFERRED wird die Beschränkung erst beim Commit überprüft. Sie können die Bestellzeile einfügen, bevor die Produktzeile existiert, sofern die Produktzeile vorhanden ist, wenn die Transaktion bestätigt wird.

Zur Verwendung MATCH FULL mit einem zusammengesetzten Fremdschlüssel, der erfordert, dass alle referenzierenden Spalten zusammen Null sind oder alle zusammen ungleich Null sind:

CREATE TABLE shipments ( shipment_id integer PRIMARY KEY, warehouse_id integer, product_no integer, FOREIGN KEY (warehouse_id, product_no) REFERENCES inventory (warehouse_id, product_no) MATCH FULL );