ALTER e DROP TABLE – Alterar e Excluir Tabelas e Colunas – Curso de SQL Server – 07
Alterar e Excluir Tabelas e Colunas no SQL Server
Vamos aprender agora a alterar e excluir tabelas e colunas com SQL no Microsoft SQL Server.
Para isso usaremos dois comandos: ALTER TABLE e DROP TABLE.
Comando ALTER TABLE
É possível alterar a estrutura de uma tabela após ter sido criada, acrescentando ou excluindo atributos (campos). A sintaxe básica para essa operação é como segue:
ALTER TABLE tabela ação coluna;
Vejamos a sintaxe básica para cada ação com ALTER TABLE:
Adicionar uma coluna à tabela:
ALTER TABLE nome_tabela ADD nome_coluna tipo_dados;
Excluir uma coluna de uma tabela:
ALTER TABLE nome_tabela DROP COLUMN nome_coluna;
Alterar o tipo de dados de uma coluna:
ALTER TABLE nome_tabela ALTER COLUMN nome_coluna tipo_dados;
Adicionar uma constraint do tipo NOT NULL a uma coluna:
ALTER TABLE nome_tabela ALTER COLUMN nome_coluna tipo_dados NOT NULL;
Alterar uma tabela para adicionar uma constraint de chave primária a uma coluna:
ALTER TABLE nome_tabela ADD CONSTRAINT nome_constraint PRIMARY KEY (coluna1, coluna2, ...);
Excluir uma constraint de uma tabela:
ALTER TABLE nome_tabela DROP CONSTRAINT nome_constraint;
Exemplos
1 – Excluir a coluna ID_Autor da tabela tbl_livros:
ALTER TABLE tbl_livros DROP COLUMN ID_Autor;
2 – Adicionar a coluna ID_Autor à tabela tbl_livros e configurá-la como chave estrangeira da coluna ID_Autor da tabela tbl_autores:
ALTER TABLE tbl_livros ADD ID_Autor SMALLINT NOT NULL CONSTRAINT fk_ID_Autor FOREIGN KEY (ID_Autor) REFERENCES tbl_autores (ID_autor);
3 – Adicionar a coluna ID_editora à tabela tbl_livros e configurá-la como chave estrangeira da coluna ID_editora da tabela tbl_editoras:
ALTER TABLE tbl_livros ADD ID_editora SMALLINT NOT NULL CONSTRAINT fk_id_editora FOREIGN KEY (ID_editora) REFERENCES tbl_editoras (ID_editora) ON DELETE CASCADE;
4 – Alterando o tipo de dados da coluna ID_Autor para SMALLINT:
ALTER TABLE tbl_livros ALTER COLUMN ID_Autor SMALLINT;
5 – Adicionando a constraint PRIMARY KEY á coluna ID_Cliente (já existente) da tabela Clientes:
ALTER TABLE Clientes ADD CONSTRAINT pk_id_cliente PRIMARY KEY (ID_Cliente);
Comando DROP TABLE
Usamos o comando DROP TABLE para excluir uma tabela do banco de dados, incluindo todos os seus dados.
Sintaxe:
DROP TABLE nome_tabela;
Exemplo:
DROP TABLE Clientes;
Exercício para Fixação
Tente fazer o seguinte exercício sozinho. A resolução sugerida está na sequência:
1. Criar uma nova tabela no banco de dados db_Biblioteca, para armazenar gêneros dos livros. Sugestão de nome: tbl_generos
2. Criar uma nova coluna na tabela de livros para realizar o relacionamento com a tabela de gêneros.
3. Inserir um novo registro de livro no banco. Atenção: inserir antes quaisquer editoras, autores e gêneros necessários. Pesquise um livro que você gosta para realizar esse cadastro.
4. Verifique se os dados foram inseridos com sucesso usando o comando:
SELECT * FROM nome_tabela;
RESOLUÇÃO
CREATE TABLE tbl_generos ( ID_Genero Tinyint IDENTITY, Genero VARCHAR(25) CONSTRAINT pk_id_genero PRIMARY KEY (ID_Genero) ); ALTER TABLE tbl_livros ADD ID_Genero Tinyint CONSTRAINT fk_id_genero FOREIGN KEY (ID_Genero) REFERENCES tbl_generos (ID_Genero) ON DELETE CASCADE; INSERT INTO tbl_generos (Genero) VALUES ('Ficção'), ('Romance'), ('Aventura'), ('Técnico'), ('Suspense'); INSERT INTO tbl_autores (ID_Autor, Nome_Autor) VALUES (6, 'Daniel Defoe'); INSERT INTO tbl_editoras (Nome_Editora) VALUES ('Penguin Classics'); INSERT INTO tbl_Livros (Nome_Livro, ISBN, Data_Pub, Preco_Livro, ID_Autor, ID_editora, ID_Genero) VALUES ('As Aventuras de Robinson Crusoé','98653696912','18700509', 32.50, 6, 10,3); SELECT * FROM tbl_livros;
O livro foi inserido com sucesso. Note que os livros inseridos anteriormente não possuem gênero cadastrado, sendo mostrado o valor NULL (nulo), mas é possível adicionar esse dado a eles usando a cláusula SQL UPDATE, que estudaremos nas próximas lições.
Dúvidas? Assista a um vídeo da Bóson Treinamentos sobre o assunto:
Olá Prof. Reis,
Gostaria de saber onde será usado o nome de uma constraint, após obrigatoriamente criada, como por exemplo, a “fk_ID_Autor”, desta video-aula.
Muito obrigado.
Olá Sidney! O nome da constraint é importante pois será utilizado para que possamos interagir com ela – por exemplo, se precisarmos exclui-la, o faremos pelo seu nome. Veja a sintaxe no texto do artigo. Abraço!
ótimooooooo , treinamento ,
Obrigado Natalio!
Como alterar o nome de uma coluna?
obrigado
Leandro
Olá Leandro!
Para alterar o nome de uma coluna você pode usar o procedimento armazenado sp_rename no SQL Server, como segue:
EXEC sp_RENAME ‘Nome_Tabela.Nome_Coluna_Atual’ , ‘Novo_Nome_Coluna’, ‘COLUMN’
Onde Nome_Tabela.Nome_Coluna_Atual é o nome atual da coluna, precedido do nome da tabela que a contém, e Novo_Nome_Coluna é o nome que você quer atribuir a essa coluna agora.
Abraço!
Estava com esse problema. Vlw profº
Olá, Professor, boa tarde!
Gostaria de inserir uma nova coluna em uma tabela no SQL Server, o problema que essa coluna precisa estar depois de uma outra existente e não no final da tabela. Tem como fazer isso ?
Olá Valdeci!
De acordo com a documentação da Microsoft, você deve utilizar o SQL Server Management Studio para inserir uma coluna em uma posição específica em uma tabela já existente, não sendo possível via comando SQL (ALTER TABLE)
Aqui está a explicação completa:
https://docs.microsoft.com/pt-br/sql/relational-databases/tables/add-columns-to-a-table-database-engine
Abraço!
Olá Prof. Fábio!
Primeiramente, obrigado pelo conteúdo. Seus materiais são de excelente qualidade!
Gostaria de deixar apenas a título de observação/curiosidade que no SQL SERVER 2012 o comando para alterar a coluna não está compilando quando utilizamos o MODIFY COLUMN. Uma alternativa é substituir por ALTER COLUMN. Exemplos:
ALTER TABLE nome_tabela MODIFY COLUMN nome_coluna tipo_dados;
ALTER TABLE nome_tabela ALTER COLUMN nome_coluna tipo_dados;
Fonte: https://docs.microsoft.com/pt-br/sql/t-sql/statements/alter-table-transact-sql?view=sql-server-ver15#alter_column
Muito obrigado pelo complemento José!!!!
Abraço!
Como eu faço para excluir(zerar) todas as tabelas de um banco de dados access com codigo vba??