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.
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.
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]
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>
[ CONSTRAINT <constraint_name> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
[ 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 ]
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} ]
La commande ALTER TABLE accepte les entrées suivantes :
| Entrée | Description |
|---|---|
| <table> | Nom de la table à modifier. |
| <action> | Action exécutée pour la table définie :
|
| <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 :
|
La commande ALTER TABLE produit les sorties suivantes :
| Sortie | Description |
|---|---|
| ALTER | La commande a abouti. |
| ERROR | La table ou la colonne défini n'est pas disponible. |
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.
MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP
DEFAULT;
MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6));
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO
city;
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers;
MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen;
MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers;
MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey
PRIMARY KEY(col1) INITIALLY IMMEDIATE;
MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey
CASCADE;