ALTER TABLE nome-da-tabela { ADD COLUMN defini????o-da-coluna | ADD CONSTRAINT cl??usula | DROP { PRIMARY KEY | FOREIGN KEY nome-da-restri????o | UNIQUE nome-da-restri????o | CHECK nome-da-restri????o | CONSTRAINT nome-da-restri????o } ALTER altera????o-da-coluna | LOCKSIZE { ROW | TABLE } }
nome-de-coluna-simples tipo-de-dado [ restri????o no n??vel-de-coluna ]* [ [ WITH ] DEFAULT {Express??oConstante | NULL } ]
nome-da-coluna SET DATA TYPE VARCHAR(inteiro) | nome-da-coluna SET INCREMENT BY constante-inteira
Na altera????o-da-coluna, SET INCREMENT BY constante-inteira especifica o intervalo entre valores consecutivos da coluna de identidade. O pr??ximo valor a ser gerado para a coluna de identidade ser?? determinado a partir do ??ltimo valor atribu??do e o incremento a ser aplicado. A coluna deve ter sido definida com o atributo IDENTITY.
ALTER TABLE n??o afeta nenhuma vis??o que faz refer??ncia ?? tabela sendo alterada. Isto inclui as vis??es que possuem "*" na lista do SELECT. Estas vis??es devem ser removidas e recriadas para que retornem a nova coluna.
A sintaxe para a defini????o-da-coluna de uma nova coluna ?? a mesma que para a coluna na instru????o CREATE TABLE. Isto significa que pode ser colocada uma restri????o de coluna para a nova coluna na instru????o ALTER TABLE ADD COLUMN. Entretanto, somente pode ser adicionada uma coluna com a restri????o NOT NULL a uma tabela existente se for fornecido um valor padr??o; caso contr??rio, ?? lan??ada uma exce????o ao ser executada a instru????o ALTER TABLE.
Assim como em CREATE TABLE, se a defini????o da coluna incluir uma restri????o de unicidade ou de chave prim??ria, a coluna n??o poder?? conter valores nulos e, portanto, tamb??m deve ser especificado o atributo NOT NULL (SQLState 42831).
ALTER TABLE ADD UNIQUE e PRIMARY KEY disp??em de um m??todo resumido para definir uma chave prim??ria formada por uma ??nica coluna. Se for especificado PRIMARY KEY na defini????o da coluna C, o efeito ser?? o mesmo de especificar a cl??usula PRIMARY KEY(C) como uma cl??usula em separado. A coluna n??o pode conter valores nulos, portanto o atributo NOT NULL tamb??m deve ser especificado.
Para obter informa????es sobre a sintaxe das restri????es deve ser consultada a Cl??usula CONSTRAINT. Ao se adicionar restri????es com a sintaxe ALTER TABLE ADD CONSTRAINT, deve ser utilizada a sintaxe para restri????o no n??vel-de-tabela.
ALTER TABLE DROP CONSTRAINT remove uma restri????o de uma tabela existente. Para remover uma restri????o sem nome, deve ser especificado o nome gerado para a restri????o armazenado em SYS.SYSCONSTRAINTS na forma de um identificador delimitado.
A remo????o da restri????o de chave prim??ria, de unicidade ou de chave estrangeira remove o ??ndice f??sico que imp??e a restri????o (tamb??m conhecido por ??ndice de apoio).
Para aumentar o comprimento de uma coluna deste tipo, deve ser especificado o tipo de dado e o novo tamanho ap??s o nome da coluna.
N??o ?? permitido diminuir o tamanho ou mudar o tipo de dado. N??o ?? permitido aumentar o comprimento de uma coluna que faz parte de uma chave prim??ria ou chave de unicidade referenciada por uma restri????o de chave estrangeira, ou que seja parte de uma restri????o de chave estrangeira.
Para definir o intervalo entre valores consecutivos da coluna de identidade deve ser especificada uma constante-inteira. A coluna deve ter sido definida anteriormente com o atributo IDENTITY (SQLState 42837). Caso existam linhas na tabela, os valores na coluna para a qual o padr??o para SET INCREMENT foi adicionado n??o mudam.
Pode ser especificado um valor padr??o para a nova coluna. O valor padr??o ?? o valor inserido na coluna se n??o for especificado nenhum outro valor. Quando n??o ?? especificado explicitamente, o valor padr??o da coluna ?? NULL. Se for especificado valor padr??o para uma nova coluna, as linhas existentes na tabela receber??o o valor padr??o na nova coluna.
Para obter mais informa????es sobre valor padr??o deve ser consultada a Instru????o CREATE TABLE.
A cl??usula LOCKSIZE permite sobrepor o bloqueio no n??vel-de-linha para uma determinada tabela, se o sistema utilizar a defini????o padr??o de bloqueio no n??vel-de-linha (Se o sistema estiver definido com bloqueio no n??vel-de-tabela, n??o ser?? poss??vel alterar a granularidade do bloqueio, embora o Derby permita utilizar a cl??usula LOCKSIZE nesta situa????o sem lan??ar uma exce????o). Para sobrepor o bloqueio no n??vel-de-linha de uma determinada tabela, deve ser definido o bloqueio da tabela como TABLE. Se a tabela tiver sido criada com a granularidade de bloqueio no n??vel-de-tabela, o bloqueio poder?? passar a ser no n??vel-de-linha especificando ROW na cl??usula LOCKSIZE da instru????o ALTER TABLE. Para obter informa????es sobre porque algumas vezes esta altera????o ?? ??til, deve ser consultado o Ajuste do Derby.
-- Adicionar uma nova coluna com restri????o no -- n??vel-de-coluna a uma tabela existente. -- Se a tabela tiver alguma linha ser?? lan??ada uma exce????o, -- uma vez que a nova coluna ser?? inicializada com NULL -- em todas as linhas da tabela. ALTER TABLE CIDADES ADD COLUMN REGI??O VARCHAR(26) CONSTRAINT NOVA_RESTRI????O CHECK (REGI??O IS NOT NULL); -- Adicionar uma restri????o de unicidade a uma tabela existente. -- Ser?? lan??ada uma exce????o se forem encontradas chaves duplicadas. ALTER TABLE SAMP.DEPARTAMENTOS ADD CONSTRAINT NOVA_UNICIDADE UNIQUE (NUM_DEP); -- Adicionar uma restri????o de chave estrangeira ?? -- tabela cidades. Cada linha de cidades ?? verificada -- para ter certeza que satisfaz a restri????o. -- Se alguma linha n??o satisfizer a restri????o, a -- restri????o n??o ser?? adicionada ALTER TABLE CIDADES ADD CONSTRAINT FK_PA??SES FOREIGN KEY (PA??S) REFERENCES PA??SES (PA??S); -- Adicionar uma restri????o de chave prim??ria ?? tabela. -- Primeiro, criar a tabela. CREATE TABLE ATIVIDADES (ID_CIDADE INT NOT NULL, ESTA????O CHAR(2), ATIVIDADE VARCHAR(32) NOT NULL); -- N??o ser?? poss??vel adicionar esta restri????o se as -- colunas que comp??em a chave prim??ria possu??rem -- dados nulos ou valores duplicados. ALTER TABLE ATIVIDADES ADD PRIMARY KEY (ID_CIDADE, ATIVIDADE); -- Remover a restri????o de chave prim??ria da tabela cidades. ALTER TABLE CIDADES DROP CONSTRAINT PK_CIDADES; -- Remover a restri????o de chave estrangeira da tabela cidades. ALTER TABLE CIDADES DROP CONSTRAINT FK_PA??SES; -- Adicionar a coluna NUM_DEP com valor padr??o igual a 1. ALTER TABLE SAMP.ATIV_EMP ADD COLUMN NUM_DEP INT DEFAULT 1; -- Aumentar o comprimento da coluna VARCHAR. ALTER TABLE SAMP.EMP_FOTO ALTER FORMATO_FOTO SET DATA TYPE VARCHAR(30); -- Alterar a granularidade do bloqueio da tabela. ALTER TABLE SAMP.VENDAS LOCKSIZE TABLE;
A instru????o ALTER TABLE faz com que todas as instru????es que dependem da tabela sendo alterada sejam recompiladas antes de sua pr??xima execu????o. A instru????o ALTER TABLE n??o ?? permitida caso existam cursores abertos fazendo refer??ncia ?? tabela sendo alterada.