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.
- 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
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]<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>
<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 prend en compte les données suivantes :
| Entrée | Descriptif |
|---|---|
| <table> | Le nom de la table à modifier. |
| <action> | L'action à effectuer pour la table spécifiée :
|
| <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 :
|
Sorties
La commande ALTER TABLE produit les résultats suivants :
| 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
- 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;