View a markdown version of this page

CREATE TABLE - Amazon Aurora DSQL

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

CREATE TABLE

CREATE TABLE définit une nouvelle table.

Syntaxe prise en charge

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 [, ... ] ) ]

Colonnes d'identité

Note

Lorsque vous utilisez des colonnes d'identité, la valeur du cache doit être soigneusement prise en compte. Pour plus d'informations, consultez la légende Important de la CREATE SEQUENCE page.

Pour obtenir des conseils sur la meilleure façon d'utiliser les colonnes d'identité en fonction des modèles de charge de travail, consultezUtilisation de séquences et de colonnes d'identité.

La GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options ) clause crée la colonne en tant que colonne d'identité. Une séquence implicite lui sera attachée et, dans les lignes nouvellement insérées, la colonne aura automatiquement des valeurs de la séquence qui lui est attribuée. Une telle colonne est impliciteNOT NULL.

Les clauses ALWAYS et BY DEFAULT déterminent la manière dont les valeurs spécifiées par l'utilisateur sont traitées de manière explicite dans INSERT les UPDATE commandes.

Dans une INSERT commande, si elle ALWAYS est sélectionnée, une valeur spécifiée par l'utilisateur n'est acceptée que si l'INSERTinstruction le spécifieOVERRIDING SYSTEM VALUE. Si cette option BY DEFAULT est sélectionnée, la valeur spécifiée par l'utilisateur est prioritaire.

Dans une UPDATE commande, si elle ALWAYS est sélectionnée, toute mise à jour de la colonne vers une valeur autre que DEFAULT celle-ci sera rejetée. Si cette option BY DEFAULT est sélectionnée, la colonne peut être mise à jour normalement. (Il n'y a aucune OVERRIDING clause pour la UPDATE commande.)

La sequence_options clause peut être utilisée pour modifier les paramètres de la séquence. Les options disponibles incluent celles indiquées pourCREATE SEQUENCE, plusSEQUENCE NAME name. Dans le SEQUENCE NAME cas contraire, le système choisit un nom non utilisé pour la séquence.

Mode de stockage

La STORAGE clause optionnelle définit le mode de stockage de la colonne. Utilisez ces options pour contrôler le comportement de compression pour les types de données de longueur variable tels queJSON, JSONBTEXT, VARCHAR et. BPCHAR

Amazon Aurora DSQL compresse certains types de données lorsqu'ils dépassent une certaine taille. Pour désactiver ce comportement, utilisez les EXTERNAL options PLAIN ou.

PLAIN

Aurora DSQL stocke les données en ligne sans compression. Il s'agit de la seule option pour les types de données de longueur fixe tels queinteger. Utilisez cette option pour désactiver la compression sur certains types de longueur variable.

MAIN | EXTENDED | DEFAULT

MAINet EXTENDED autorisez la compression facultative de la colonne si le type de données sous-jacent prend en charge la compression. DEFAULTdéfinit le mode de stockage sur le mode par défaut pour le type de données de la colonne.

EXTERNAL

Aurora DSQL ne prend pas actuellement en charge les tables TOAST, mais EXTERNAL désactive la compression sur les types de données qui prennent en charge la compression.

Contraintes liées aux clés étrangères

Les FOREIGN KEY clauses REFERENCES and spécifient une contrainte de clé étrangère, qui exige qu'un groupe d'une ou de plusieurs colonnes de la nouvelle table ne contienne que des valeurs correspondant aux valeurs des colonnes référencées d'une ligne de la table référencée. Si vous omettez la refcolumn liste, Aurora DSQL utilise la clé primaire du. reftable Dans le cas contraire, la refcolumn liste doit faire référence aux colonnes d'une contrainte de clé unique ou primaire non reportable.

Aurora DSQL compare une valeur insérée dans la ou les colonnes de référence aux valeurs de la table référencée et des colonnes référencées à l'aide du type de correspondance donné. Deux types de correspondance sont pris en charge : MATCH FULL et MATCH SIMPLE (qui est la valeur par défaut).

Vous pouvez définir une clé étrangère en tant que contrainte de colonne ou de table :

  • Contrainte de colonne (RÉFÉRENCES) — À utiliser REFERENCES après le type de données de colonne pour les clés étrangères à colonne unique.

  • Contrainte de table (CLÉ ÉTRANGÈRE) — À utiliser FOREIGN KEY (...) REFERENCES ... pour les clés étrangères à une ou plusieurs colonnes.

Actions référentielles

Lorsque vous modifiez les données des colonnes référencées, Aurora DSQL exécute des actions sur les données des colonnes de la table de référence. La ON DELETE clause spécifie l'action à effectuer lorsqu'une transaction supprime une ligne référencée dans la table référencée. De même, la ON UPDATE clause spécifie l'action à effectuer lorsqu'une transaction met à jour une colonne référencée avec une nouvelle valeur. Si une transaction met à jour la ligne mais ne modifie pas la colonne référencée, Aurora DSQL n'entreprend aucune action.

Aurora DSQL prend en charge les actions référentielles suivantes :

NO ACTION (par défaut)

Produit une erreur si la suppression ou la mise à jour entraîne une violation de la contrainte de clé étrangère. Si la contrainte est différée, Aurora DSQL génère cette erreur au moment de la vérification de la contrainte si des lignes de référence existent toujours. Il s'agit de l'action par défaut.

RESTRICT

Produit une erreur si une ligne à supprimer ou à mettre à jour correspond à une ligne du tableau de référence. Cela empêche l'action même si l'état qui suit l'action ne violerait pas la contrainte de clé étrangère. En particulier, il empêche la mise à jour des lignes référencées vers des valeurs distinctes mais comparables. Contrairement à NO ACTION cela, le RESTRICT contrôle ne peut pas être différé.

Les actions en cascade sont prises en compte dans les limites de modification des transactions

Les SET DEFAULT actions CASCADESET NULL, et modifient automatiquement les lignes du tableau de référence lorsqu'une ligne référencée est mise à jour ou supprimée. La limite de lignes de transactions Aurora DSQL s'applique à ces actions et peut provoquer des échecs inattendus si elle n'est pas utilisée avec soin. Préférez NO ACTION ou RESTRICT pour les relations clés étrangères où la cardinalité de la rangée d'enfants est illimitée ou imprévisible. Pour de plus amples informations, veuillez consulter Limites de base de données dans Aurora DSQL.

CASCADE

Supprimez toutes les lignes faisant référence à la ligne supprimée ou mettez à jour les valeurs des colonnes de référence en fonction des nouvelles valeurs des colonnes référencées, respectivement.

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

Définissez toutes les colonnes de référence, ou un sous-ensemble spécifié de colonnes de référence, sur null. Un sous-ensemble de colonnes ne peut être spécifié que pour les ON DELETE actions.

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

Définissez toutes les colonnes de référence, ou un sous-ensemble spécifié de colonnes de référence, sur leurs valeurs par défaut. Un sous-ensemble de colonnes ne peut être spécifié que pour les ON DELETE actions. (La table référencée doit contenir une ligne correspondant aux valeurs par défaut, si elles ne sont pas nulles, sinon l'opération échouera.)

Types de matchs

Aurora DSQL prend en charge les types de correspondance suivants :

MATCH SIMPLE (par défaut)

Permet à n'importe quelle colonne de clé étrangère d'être nulle. Si l'une d'entre elles est nulle, il n'est pas nécessaire que la ligne corresponde dans la table référencée.

MATCH FULL

N'autorise pas une colonne d'une clé étrangère multicolonne à être nulle sauf si toutes les colonnes de clé étrangère sont nulles. S'ils sont tous nuls, il n'est pas nécessaire que la ligne corresponde dans la table référencée.

Vous pouvez appliquer NOT NULL des contraintes aux colonnes de référence pour éviter que de tels cas ne se produisent.

Déférabilité

Vous pouvez contrôler le moment où une contrainte de clé étrangère est vérifiée en spécifiant sa différabilité :

NOT DEFERRABLE (par défaut)

Aurora DSQL vérifie cette contrainte immédiatement après chaque instruction. Vous ne pouvez pas le modifier en différé avecSET CONSTRAINTS.

DEFERRABLE

La contrainte peut être différée jusqu'à la fin de la transaction en utilisantSET CONSTRAINTS. Sans INITIALLY clause, la valeur par défaut est. INITIALLY IMMEDIATE

DEFERRABLE INITIALLY IMMEDIATE

Par défaut, Aurora DSQL vérifie cette contrainte après chaque instruction, mais vous pouvez la reporter au sein d'une transaction en utilisant. SET CONSTRAINTS ... DEFERRED

DEFERRABLE INITIALLY DEFERRED

Par défaut, Aurora DSQL vérifie cette contrainte au moment de la validation de la transaction. Vous pouvez le modifier pour qu'il soit immédiat au cours d'une transaction en utilisantSET CONSTRAINTS ... IMMEDIATE.

Pour plus d'informations sur la modification du calendrier de vérification des contraintes au sein d'une transaction, consultezSET CONSTRAINTS.

Contraintes de clé étrangère uniquement

Dans Aurora DSQL, l'DEFERRABLEoption s'applique uniquement aux contraintes de clé étrangère.

Exemples de contraintes de clé étrangère

Supposons que vous ayez une table pour stocker les produits :

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

Vous voulez maintenant un tableau stockant les commandes de ces produits. Vous voulez vous assurer que le tableau des commandes contient des références à des produits qui existent réellement. Définissez une contrainte de clé étrangère dans la table des commandes qui fait référence à la table des produits :

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

Vous ne pouvez plus créer de commandes avec des product_no entrées non nulles qui n'apparaissent pas dans le tableau des produits.

Dans ce cas, la table des commandes est la table de référence et la table des produits est la table référencée. De même, il existe des colonnes de référence et des colonnes référencées.

Vous pouvez raccourcir la commande ci-dessus comme suit :

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

Si vous omettez la liste des colonnes, Aurora DSQL utilise la clé primaire de la table référencée comme colonne (s) référencée (s).

Vous pouvez attribuer votre propre nom à une contrainte de clé étrangère de la manière habituelle :

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

Une clé étrangère peut également contraindre et référencer un groupe de colonnes. Il doit ensuite être écrit sous forme de contrainte de table :

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) );

Le nombre et les types des colonnes soumises à des contraintes doivent être compatibles avec le nombre et les types des colonnes référencées.

Une table peut comporter plusieurs contraintes de clé étrangère. Ceci est utilisé pour implémenter des relations plusieurs-à-plusieurs entre les tables :

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

Une contrainte de clé étrangère peut faire référence à la même table à laquelle elle appartient. C'est ce qu'on appelle une clé étrangère autoréférentielle. Par exemple, si vous souhaitez que les lignes d'un tableau représentent les nœuds d'une structure arborescente, vous pouvez écrire :

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

Un nœud de niveau supérieur aurait la valeur NULLparent_id, tandis que les parent_id entrées non NULL sont obligées de faire référence à des lignes valides de la table.

Vous pouvez spécifier des actions référentielles pour contrôler ce qui se passe lorsqu'une ligne référencée est supprimée ou mise à jour. L'exemple suivant permet ON DELETE RESTRICT d'empêcher la suppression d'un produit qui est toujours référencé par une commande :

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

AvecRESTRICT, tenter de supprimer un produit auquel des commandes font référence génère immédiatement une erreur. Par défautNO ACTION, le contrôle peut être différé jusqu'à la fin de la transaction si la contrainte est déclaréeDEFERRABLE.

Pour créer une clé étrangère qui peut être différée jusqu'à la fin d'une transaction, utilisez DEFERRABLE cette option. Ceci est utile lorsque vous devez insérer des lignes dans les deux tableaux au sein de la même transaction, quel que soit l'ordre :

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

AvecDEFERRABLE INITIALLY DEFERRED, la contrainte n'est vérifiée qu'au moment de la validation. Vous pouvez insérer la ligne de commande avant que la ligne de produit n'existe, à condition que la ligne de produit soit présente au moment de la validation de la transaction.

À utiliser MATCH FULL avec une clé étrangère composite, qui nécessite que toutes les colonnes de référence soient nulles ensemble ou non nulles ensemble :

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 );