Início » SQL Server » Usando comandos ALTER TABLE, UPDATE e DELETE

Usando comandos ALTER TABLE, UPDATE e DELETE

Neste artigo, vamos entender como funcionam os comandos ALTER TABLE, DROP, DELETE e UPDATE. Consideremos as seguintes tabelas com seus campos e registros:

create table vendedor (
codigo_vendedor int not null primary key,
nome varchar (50),
idade char (3),
sexo char (1),
salario decimal (10,2)
)

create table cliente (
codigo_cliente int not null primary key,
nome varchar (50),
cidade varchar (10),
tipo_industria char (1)
)

create table pedido (
numero_pedido int not null primary key,
codigo_cliente int,
codigo_vendedor int,
valor_pedido decimal (10,2)
)

alter table pedido
add constraint fk_pedido_cliente foreign key (codigo_cliente) references cliente (codigo_cliente) on update cascade on delete cascade

alter table pedido
add constraint fk_pedido_vendedor foreign key (codigo_vendedor) references vendedor (codigo_vendedor) on update cascade on delete cascade

Os comandos ON UPDATE CASCADE e ON DELETE CASCADE servem para que, no momento que eu for utilizar meus comandos UPDATE ou DELETE para modificar os campos ou registros da minha tabela, todos as PK e FK sejam modificadas, também.

– Cliente

– Pedido

– Vendedor

Observe a tabela VENDEDOR. Suponhamos que preciso inserir mais quatro campos: e-mail, endereço, cidade e CEP. Eu não preciso excluir minha tabela VENDEDOR e criá-la novamente. O SQL oferece um comando onde posso alterar essa tabela: alter table.

Entro com o comando ALTER TABLE e o nome da tabela que será alterada, a cláusula ADD (adicionar) e o nome do novo campo e o tipo do dado.

Depois de inseridos meus novos campos, veja como ficou a tabela:

alter table vendedor
add email varchar (20);

alter table vendedor
add endereco varchar (40); 

alter table vendedor
add cidade varchar (15);

alter table vendedor
add cep varchar (9);

Observação: os novos campos adicionados são nulos porque não foi adicionado nenhum registro.

Observe, agora, a tabela CLIENTE. Para excluir registros de alguma tabela especificada, podemos utilizar o comando DELETE junto com a cláusula WHERE. Se a cláusula WHERE estiver ausente, todos os registros da tabela especificada serão excluídos. Resultado: tabela válida, mas vazia.

Suponhamos que eu queira remover o cliente chamado Estrutura Construtora da minha tabela CLIENTE, que é a tabela onde são inseridos os meus clientes. Então, entramos com o comando DELETE e a tabela especificada, juntamente com a cláusula WHERE e o campo da tabela que será declarado o registro que será excluído.

Lembrem-se: a cláusula WHERE é uma condição. Se não utilizá-la para especificar o registro que será excluído, todos os campos da tabela CLIENTE serão apagados.

delete from cliente where codigo_cliente = 4;

Observação: se no momento em que foram criados os relacionamentos de foreign keys da minha base de dados eu não tiver usado o ON UPDATE CASCADE, teríamos o seguinte erro:

Este erro que diz que o comando DELETE conflitou com a constraint fk_pedido_cliente criada para referenciar uma chave estrangeira entre a tabela PEDIDO e CLIENTE e, ainda especifica o nome da base de dados onde ocorre o erro, o nome da tabela e seu campo.

Esse erro aconteceu porque a tabela PEDIDO (CODIGO_CLIENTE) referencia CLIENTE (CODIGO_CLIENTE), ou seja, uma foreign key. Conclusão: utilize ON UPDATE CASCADE nos seus relacionamentos.

Ainda na tabela CLIENTE, vamos alterar o campo tipo_industria. Todos as linhas que tem tipo_industria como B deverão ser trocados para C. Como fazer isso? Temos um comando chamado UPDATE que muda os valores dos campos especificados em todas as linhas que satisfazem a condição. Podemos utilizá-lo com a cláusula SET, onde são especificadas as colunas que serão modificadas. As demais permanecem com seus valores atuais.

update cliente set tipo_industria=’C’ where tipo_industria=’B’;

Dando um novo select na tabela CLIENTE, veja como ela ficou depois de excluirmos um cliente e fazendo os updates do tipo_industria:

Agora observe a tabela VENDEDOR. Vamos mudar o nome do vendedor Abel para Abel Medeiros. Para isso, utilizamos o comando UPDATE.

update vendedor set nome=’Abel Medeiros’ where nome=’Abel’;

update vendedor set codigo_vendedor=777 where codigo_vendedor=111;

Veja como ficou nossa tabela VENDEDOR depois que fizemos os updates para o nome Abel Medeiros e trocamos seu codigo_vendedor de 111 para 777.

Note também que, na tabela CLIENTE onde tenho um relacionamento com a tabela VENDEDOR (codigo_vendedor), tem-se os dados atualizados.

Para finalizar, recomendo a leitura do artigo Restrições de integridade referencial em cascata

Bons estudos!

Andrielle Azevedo de Paula
MTAC – Microsoft Technical Audience Contributor


14 Comentários

  1. Tiago Butzke disse:

    Legal seu blog.
    Uma dica, para os códigos você pode usar a tag \[\source\ language=”linguagemQueQuiser”]\ (sem as “\”).
    Ex.:

    SELECT name FROM user;
    

    Caso fosse PHP:

    $name = "Tiago Butzke";
    

    Parabéns pelo blog.🙂

  2. Muito bom Andrielle, Poucas pessoas explicam como usar as FKS e a utilização dos comandos ON DELETE CASCADE e ON UPDATE CASCADE. Show de bola🙂

    Parabéns pelo blog.

  3. Marlon disse:

    Parabéns pelo Blog.

    Estou começando agora com o meu blog..
    tenho só alguns posts, mas, visita lá….

    http://solucoes4us.blogspot.com

    Abraço.

  4. Leandro disse:

    Muito bom! Obrigado!

  5. Muito legal para quem está iniciando, Adrielle, você acabou trocando os nomes das tabelas lá no início, onde seria Clientes, está Vendedor….. srsrs…. bom tutorial…

  6. Marcelo Souza da Silva disse:

    Parabéns pelo post, muito, mas muito interessante e didático! Me recomendarei aos meus amigos!

  7. Julio Azevedo disse:

    Olá Adrielle!
    Em primeiro lugar, parabéns pelo artigo.
    Tenho uma dúvida em relação ao ON DELETE CASCADE. Tenho uma tabela mysql que possui duas chaves estrangeiras, cada uma referenciando uma tabela diferente.
    Acontece que sempre ao tentar gravar um novo registro, referente a uma das tabelas, o mysql acusa um erro de integridade, relacionado a falta de informação em relação a uma das chaves estrageiras.
    Por exemplo, se tento gravar uma informação da tabela X, o mysql acusa erro de integridade porque o campo referente a tabela Y não foi informado,e vice versa.
    Exite alguma forma de resolver isso?
    Abs.

  8. PRECISO COLOCAR ZEROS NA FRENTE DE UM DOCUMENTO EX: 100 QUERO QUE FIQUE 000100., COMO FAÇO COM O COMANDO UPDATE

  9. São para INT?
    E deve se lembrar também de desativar o IDENTITY, quando for fazer a alteração que pode ser no braço mesmo.

  10. Muito show!
    Aquela dica do Cascade foi ótima. Já tinha usado, mas não lembrava desse detalhe e tive alguns problemas…

    Parabéns pelo blog Andrielle Azevedo de Paula!

  11. Muito obrigado, você não sabe o quanto me ajudou🙂

  12. lfelipepinho disse:

    Muito bom, parabens pelo blog! Ajudou muito😀

Deixe uma resposta

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: