ALTER TABLE

La commande ALTER TABLE permet de modifier la structure d'une table existante. Si la table est utilisée par une requête active, la commande ALTER attend que cette requête se termine.

Utilisez la commande ALTER TABLE pour
  • Modifier ou supprimer une colonne par défaut. Les valeurs par défaut que vous définissez ne s'appliquent qu'aux commandes INSERT ultérieures, et non aux lignes déjà présentes dans la table.
  • Renommer une colonne ou une table sans modifier le type ou la taille des données dans la colonne ou la table. Vous pouvez omettre la colonne des mots-clés.
  • Ajouter ou supprimer une contrainte de table ou de colonne. Vous ne pouvez pas modifier une contrainte. Vous devez alors supprimer la contrainte et en créer une nouvelle.
  • Modifier la longueur d'une colonne varchar.

Si une table est référencée par une procédure stockée, l'ajout ou la suppression d'une colonne n'est pas autorisé. Vous devez d'abord supprimer la procédure stockée avant d'exécuter la commande ALTER TABLE, puis recréer la procédure stockée après la modification de la table.

Syntaxe

Syntaxe de modification d'un tableau :
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]
Où " <action> peut être l'un des éléments suivants :
ADD COLUMN <col> <type> [<col_constraint>][,…] |
ADD <table_constraint> |
ALTER [COLUMN] <col> { SET DEFAULT <value> | DROP DEFAULT } |
DROP [COLUMN] column_name[,column_name…] {CASCADE | RESTRICT } |
DROP CONSTRAINT <constraint_name> {CASCADE | RESTRICT} |
MODIFY COLUMN (<col> VARCHAR(<maxsize>)) |
OWNER TO <user_name> |
RENAME [COLUMN] <col> TO <new_col_name> |
RENAME TO <new_table> |
SET PRIVILEGES TO <table> 
Où " <col_constraint> représente :
[ CONSTRAINT <constraint_name> ] 
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
Où " <table_constraint> représente :
[ CONSTRAINT <constraint_name> ] 
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<pkcol_name>[,<pkcol_name>…] ) |
FOREIGN KEY (<fkcol_name>[,<fkcol_name>…] ) <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
Où " <ref> représente :
REFERENCES <reftable> [ (<refcol_name>[,<refcol_name>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]

Entrées

La commande ALTER TABLE prend en compte les données suivantes :

Tableau 1. Entrées ALTER TABLE
Entrée Descriptif
<table> Le nom de la table à modifier.
<action> L'action à effectuer pour la table spécifiée :
Ajouter une colonne
Ajouter une colonne. Cette entrée ne peut pas être spécifiée dans un bloc de transaction.
Sélectionner une interaction avec l'organisme de réglementation<table_constraint>
Ajouter une contrainte de table.
ALTER [COLONNE]
Modifier ou supprimer la valeur par défaut d'une colonne.
DROP [COLONNE]
Déposer une colonne. Toutes les contraintes qui s'appuient sur la colonne supprimée sont également supprimées automatiquement. Cette entrée ne peut pas être spécifiée dans un bloc de transaction. Vous ne pouvez pas supprimer une colonne de distribution, une colonne "organiser sur" ou la dernière colonne restante d'un tableau.

Si vous supprimez une colonne et souhaitez réutiliser son nom, exécutez d'abord la commande GROOM TABLE <tablename> VERSIONS ; sinon, des erreurs risquent de se produire.

CONTRAINTE DE CHUTE
Supprimer une contrainte.
MODIFY COLUMN
Modifier la longueur d'une colonne.
PROPRIÉTAIRE
Modifier le propriétaire de la table.
RENOMMER [COLONNE]
Renommer une colonne.
Renommer en
Renommer le tableau.
FIXER LES PRIVILÈGES À
Définir les privilèges de la table modifiée en fonction de ceux d'une autre table.
<col> Nom d'une colonne.
<nom_utilisateur> Le nom d'un utilisateur.
<nouveau_nom_colonne> Le nouveau nom à donner à la colonne.
<nouveau_tableau> Le nouveau nom de la table.
Organiser le Les colonnes (de un à quatre) sur lesquelles le tableau doit être organisé. Ceci ne peut pas être spécifié pour les tables externes. Si des colonnes sont spécifiées, la table ne peut pas avoir de vues matérialisées et tous les types de données des colonnes spécifiées doivent être applicables à la zone. La réorganisation des données de la table prend effet lorsque GROOM TABLE est exécuté. Pour plus d'informations, voir "Using Clustered Base Tables" dans le IBM® Netezza® System Administrator's Guide.
<nom_contrainte> Nom à donner à une contrainte de colonne ou de table. Si vous n'indiquez pas de nom, le système en génère un.
NON REPORTABLE | REPORTABLE Contrôle si la contrainte peut être reportée à la fin de la transaction. NOT DEFERRABLE est la valeur par défaut. Netezza Performance Server ne prend pas en charge le contrôle des contraintes et l'intégrité référentielle)
INITIALLY Spécifie soit DEFERRED (à la fin de la transaction), soit IMMEDIATE (à la fin de chaque relevé).
NON NUL | NUL Si la colonne est autorisée à contenir des valeurs nulles. NULL est la valeur par défaut.
UNIQUE (contrainte de colonne et de table) Si chaque valeur de la colonne doit être unique.
PRIMARY KEY (contrainte de colonne et de table) Indique si les colonnes spécifiées doivent constituer la clé primaire de la table.

Cette contrainte est essentiellement une combinaison des contraintes UNIQUE et NOT NULL, mais l'identification d'un ensemble de colonnes en tant que clé primaire fournit également des métadonnées sur la conception du schéma. Une clé primaire implique que d'autres tables peuvent s'appuyer sur cet ensemble de colonnes comme identifiant unique pour les lignes.

Vous ne pouvez spécifier qu'une seule contrainte de clé primaire pour une table, soit en tant que contrainte de colonne, soit en tant que contrainte de table.

L'ensemble des colonnes qui constituent la clé primaire doit être différent de tout autre ensemble de colonnes nommé par une contrainte unique définie pour la table.

DEFAULT (contrainte de colonne) Valeur par défaut à placer dans chaque ligne pour cette colonne.
REFERENCES (contrainte de colonne) Les colonnes spécifiées de la nouvelle table ne doivent contenir que des valeurs qui correspondent aux valeurs des colonnes spécifiées de la table spécifiée.
FOREIGN KEY et REFERENCES table (contrainte de table) Les colonnes spécifiées de la nouvelle table ne doivent contenir que des valeurs qui correspondent aux valeurs des colonnes spécifiées de la table spécifiée. Si vous ne spécifiez pas de colonne, la valeur doit correspondre à la clé primaire de la table. Les colonnes spécifiées de la table référencée doivent avoir une contrainte de clé unique ou primaire dans cette table.
MATCH COMPLET MATCH FULL empêche une colonne d'une clé étrangère multicolonne d'être nulle si d'autres parties de la clé étrangère ne sont pas nulles. Il s'agit de la valeur par défaut. MATCH PARTIAL n'est pas pris en charge.
À LA MISE À JOUR | À LA SUPPRESSION Action à entreprendre lorsque la table ou les colonnes spécifiées sont mises à jour ou supprimées :
NO ACTION
Affiche une erreur si la clé étrangère n'est pas respectée. Il s'agit de la valeur par défaut.
RESTRICT
Identique à l'absence d'action.
CASCADE
Supprime toutes les lignes qui font référence à la ligne supprimée.
SET NULL
Fixe les valeurs des colonnes de référence à leur valeur par défaut.
SET DEFAULT
Fixe les valeurs des colonnes de référence à leur valeur par défaut.

Sorties

La commande ALTER TABLE produit les résultats suivants :

Tableau 2. Sorties ALTER TABLE
Sortie Descriptif
ALTER La commande a abouti.
ERROR La table ou la colonne spécifiée n'est pas disponible.

Droits

Vous devez être l'utilisateur admin, le propriétaire de la table, le propriétaire de la base de données ou du schéma dans lequel la table est définie, ou votre compte doit avoir le privilège Alter pour la table ou pour la classe d'objets Table. Si vous changez le propriétaire de la table, vous devez avoir l'accès Liste au compte d'utilisateur.

Utilisation

Voici un exemple d'utilisation :
  • Supprimer la valeur par défaut de la colonne a :
    MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP
    DEFAULT;
  • Modifier la longueur du varchar pour une colonne :
    MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6));
  • Modifier le nom d'une colonne :
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO
    city;
  • Modifier le nom d'une table :
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers;
  • Modifier le propriétaire de la table :
    MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen;
  • Remplacer les privilèges par ceux définis pour une autre table :
    MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers;
  • Ajouter une contrainte :
    MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey
    PRIMARY KEY(col1) INITIALLY IMMEDIATE;
  • Supprimer une contrainte :
    MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey
    CASCADE;