IBM PureData System for Analytics, Version 7.1

ALTER TABLE

La commande ALTER TBLE permet de changer la structure d'une table. Si la table est utilisée par une requête en cours, la commande ALTER attend la fin de la requête.

Utilisez la commande ALTER TABLE pour :
  • Changer ou supprimer la valeur par défaut d'une colonne. Les valeurs par défaut que vous définissez s'appliquent aux commandes suivantes INSERT et non pas aux lignes figurant déjà dans la table.
  • Renommer une colonne ou une table sans changer le type de données ni la table dans la colonne ou la table. Vous pouvez ignorer la colonne de mot clé.
  • Ajouter ou supprimer une contrainte de table ou de colonne. Vous ne pouvez pas changer une contrainte. A la place, vous devez supprimer la contrainte et en créer une.
  • Modifier la longueur d'une colonne varchar.

Si une table est référencée par une procédure mémorisée, vous ne pouvez pas ajouter ou supprimer une colonne. Vous devez supprimer la procédure mémorisée avant d'exécuter la commande ALTER TABLE, puis recréer la procédure mémorisée après la modification de la table.

Syntaxe

Syntaxe de modification d'une table :
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]
<action> peut correspondre 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> 
<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 ]
<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 ]
<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 accepte les entrées suivantes :

Tableau 1. Entrées de la commande ALTER TABLE
Entrée Description
<table> Nom de la table à modifier.
<action> Action exécutée pour la table définie :
ADD COLUMN
Ajoute une colonne. Cette entrée ne peut pas être définie dans un bloc de transaction.
ADD <table_constraint>
Ajoute une contrainte.
ALTER [COLUMN]
Change ou supprime une valeur par défaut de colonne.
DROP [COLUMN]
Supprime une colonne. Les contraintes qui reposent sur la colonne supprimée sont automatiquement supprimées également. Cette entrée ne peut pas être définie dans un bloc de transaction. Vous ne pouvez pas supprimer une colonne de distribution, une colonne "organize on" ni la dernière colonne d'une table.

Si vous supprimez une colonne et voulez réutiliser son nom, exécutez d'abord la commande GROOM TABLE <tablename> VERSIONS pour éviter les erreurs.

DROP CONSTRAINT
Supprime une contrainte.
MODIFY COLUMN
Change la longueur d'une colonne.
OWNER TO
Change le propriétaire de la table.
RENAME [COLUMN]
Renomme une colonne.
RENAME TO
Renomme la table. Lorsque vous changez le nom d'une table, toutes les vues qui reposent sur la table ne fonctionnent plus, car les vues utilisent la liaison de nom.
SET PRIVILEGES TO
Définit les privilèges d'une autre table comme privilèges de la table modifiée.
<col> Nom de la colonne.
<user_name> Nom d'un utilisateur.
<new_col_name> Nouveau nom d'une colonne.
<new_table> Nouveau nom de la table.
ORGANIZE ON Colonnes (entre 1 et 4) en fonction desquelles la table est organisée. Ne peut pas être défini pour les tables externes. Si vous définissez des colonnes, la table ne peut pas avoir de vues matérialisées, et tous les types de données de colonne définis doivent être mappables à une zone. La réorganisation des données de la table est appliquée lors de l'exécution de GROOM TABLE. Pour plus d'informations, voir "Utilisation des tables de base en cluster dans le document IBM Netezza System - Guide d'administration.
<constraint_name> Nom attribué à une contrainte de colonne ou de table. Si vous ne définissez pas de nom, le système en génère un.
NOT DEFERRABLE | DEFERRABLE Indique si la contrainte peut être différée à la fin de la transaction. NOT DEFERRABLE est la valeur par défaut. (Netezza ne prend pas en charge la vérification de contrainte et l'intégrité référentielle.)
INITIALLY Définit DEFERRED (la fin de la transaction) ou IMMEDIATE (à la fin de l'instruction).
NOT NULL | NULL Indique si la colonne est autorisée à contenir des valeurs null. NULL est la valeur par défaut.
UNIQUE (contrainte de colonne et de table) Indique si chaque valeur dans la colonne doit être unique.
PRIMARY KEY (contrainte de colonne et de table) Indique si les colonnes définies doivent former la clé primaire de la table.

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

Vous pouvez définir une seule contrainte de clé primaire pour une table, soit une contrainte de colonne soit une contrainte de table.

L'ensemble de colonnes constituant la clé primaire doit être différent des autres ensembles de colonnes en fonction d'une contrainte unique définie pour la table.

DEFAULT (contrainte de colonne) Valeur par défaut à placer dans chaque ligne de la colonne.
REFERENCES (containte de colonne) Les colonnes définies de la nouvelle table doivent contenir uniquement des valeurs qui correspondent aux valeurs dans les colonnes définies de la table spécifiée.
Table FOREIGN KEY et REFERENCES (contrainte de table) Les colonnes définies de la nouvelle table doivent contenir uniquement des valeurs qui correspondent aux valeurs dans les colonnes définies de la table spécifiée. Si vous ne définissez pas de colonne, la valeur doit correspondre à la clé primaire de la table. Les colonnes définies de la table référencée doivent avoir une contrainte de clé unique ou primaire dans la table.
MATCH FULL MATCH FULL empêche une colonne d'une clé étrangère multicolonne d'être null si les autres parties de la clé étrangère ne sont pas null. Il s'agit de la valeur par défaut. MATCH PARTIAL n'est pas pris en charge.
ON UPDATE | ON DELETE Action à exécuter lorsque la table ou les colonnes définies sont mises à jour ou supprimées :
NO ACTION
Génère une erreur si la clé étrangère est violée. Il s'agit de la valeur par défaut.
RESTRICT
Identique à NO ACTION.
CASCADE
Supprime les lignes qui font référence à la ligne supprimée.
SET NULL
Définit les valeurs par défaut de la colonne de référence.
SET DEFAULT
Définit les valeurs par défaut de la colonne de référence.

Sorties

La commande ALTER TABLE produit les sorties suivantes :

Tableau 2. Sorties de la commande ALTER TABLE
Sortie Description
ALTER La commande a abouti.
ERROR La table ou la colonne défini n'est pas disponible.

Privilèges

Vous devez être administrateur, propriétaire de la table, propriétaire de la base de données ou du schéma où la table est définie, ou votre compte doit avoir le privilège de modification de la table ou de la classe d'objet Table. Si vous changez le propriétaire de la table, vous devez disposer de l'accès Liste sur le compte d'utilisateur.

Utilisation

Exemple d'utilisation :
  • Suppression de la valeur par défaut d'une colonne :
    MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP
    DEFAULT;
  • Changement de la longueur varchar d'une colonne :
    MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6));
  • Changement du nom d'une colonne :
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO
    city;
  • Changement du nom d'une table :
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers;
  • Changement du propriétaire d'une table :
    MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen;
  • Remplacement des privilèges par ceux d'une autre table :
    MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers;
  • Ajout d'une contrainte :
    MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey
    PRIMARY KEY(col1) INITIALLY IMMEDIATE;
  • Suppression d'une contrainte :
    MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey
    CASCADE;


Feedback | Copyright IBM Corporation 2014 | Last updated: 2014-02-28