Bogos

outubro 2, 2008

CREATE/DROP/ALTER TABLE, INSERT INTO e UPDATE – SQL

Bom, já fiz alguns posts sobre triggers, views e packages que são recursos digamos mais avançados que usam da SQL. Neste post vou tratar somente da SQL básica e fundamental que são o CREATE e DROP TABLE (criar e apagar tabelas respectivamente), INSERT INTO (inserir registro(s) numa tabela) e o UPDATE (editar dados de uma tabela), usando como SGBD o Oracle.
Mãos à obra!

CREATE TABLE

O CREATE TABLE, como seu próprio nome já diz, é utilizado para criação de tabelas.
Sua sintaxe:

CREATE TABLE nome_tabela (campo1 tipo, campo2 tipo);

A sintaxe básica de um CREATE é essa. Agora vamos à algumas “variantes” do comando. Pra isso, vou montar uma tabela para criarmos com o CREATE.
A tabela deverá se chamar clientes e conter os campos: id do tipo numérico e que será a chave primária; nome do tipo caractere com tamanho máx. de 50 caracteres; sexo do tipo caractere limitado à 1 caractere e idFunc do tipo numérico sendo uma chave estrangeira de uma tabela chamada funcionarios (vamos supor que seria como o funcionário preferencial do cliente).
Certo, agora que temos o exemplo, vamos utilizar o CREATE TABLE para criar a tabela. Para realizar a criação, usaremos alguns comandos utilizados no CREATE como o CONSTRAINT que serve para definir principalmente chaves primárias e estrangeiras, dentro da árvore do CONSTRAINT temos o REFERENCES que indica à qual campo de qual tabela a FOREIGN KEY (chave estrangeira) da tabela se referencia.

Temos então:

CREATE TABLE clientes (id NUMBER, nome VARCHAR2(50), sexo CHAR(1), idFunc NUMBER,
CONSTRAINT pkClientes PRIMARY KEY (id),
CONSTRAINT fkFuncCli FOREIGN KEY(idFunc) REFERENCES funcionarios(id);

Vamos analisar os comandos CONSTRAINT utilizados acima.
Sintaxe:

Se for uma chave primária:
CONSTRAINT nome_da_constraint PRIMARY KEY (campo_da_tabela)

Se for uma chave estrangeira:
CONSTRAINT nome_da_constraint FOREIGN KEY(campo_da_tabela) REFERENCES tabela_referencia(campo_referencia)

Não tem segredo, é só praticar.
O CREATE TABLE também conta com o comando CHECK que serve para validar os dados inseridos, por exemplo, vamos fazer com que só seja aceito no campo sexo os valores M ou F.

CREATE TABLE clientes (id NUMBER, nome VARCHAR2(50), sexo CHAR(1), idFunc NUMBER,
CONSTRAINT pkClientes PRIMARY KEY (id),
CONSTRAINT fkFuncCli FOREIGN KEY(idFunc) REFERENCES funcionarios(id),
CHECK (sexo = ‘M’ OR sexo = ‘F’);

Pronto. Fácil.

Para apagar uma tabela é mais simples ainda (pra desfazer trabalho é sempre mais fácil notou? hehehe)

DROP TABLE

Sintaxe:

DROP TABLE nome_da_tabela;

Difícil em?!
Só vale lembrar que não é possível apagar uma tabela que seja referência de uma outra, assim como não é possível criar uma tabela que referencie uma outra que ainda não esteja criada. O mesmo serve para a remoção de um campo PK ou FK.

Vamos agora inserir um campo nessa tabela, suponhamos que esquecemos de inserir o campo  telefone e ele é necessário. Iremos também remover o campo idFunc pois ele se tornou obsoleto por ex. em nossa base de dados. Vamos ao trabalho então com a ajuda do ALTER TABLE.

ALTER TABLE

Sintaxe:

ALTER TABLE nome_tabela ADD/DROP campo [tipo];

O comando ADD adiciona um campo/coluna na tabela, então, nececessariamente precisa do tipo na frente do nome do campo. O comando DROP remove um campo da tabela.
Vamos inserir o campo telefone e remover o campo idFunc da nossa tabela:

ALTER TABLE clientes ADD telefone NUMBER, DROP idFunc;

Feito!
Vamos agora inserir dados na tabela que criamos usando a cláusula INSERT INTO.

INSERT INTO

Sintaxe:

INSERT INTO nome_tabela (campo1, campo2) VALUES (dado1, dado2);

Vamos agora inserir dois clientes na tabela que nós criamos anteriormente:

INSERT INTO clientes VALUES (1, ‘Bogos’, ‘M’, 91387598);
INSERT INTO clientes VALUES (2, ‘Fulana’, ‘M’, 81345971);

Pronto! Nota-se que após o nome da tabela é opcional definir os campos, desde que se não especificado, deverá ser na mesma sequência (no caso id, nome, sexo e telefone ja que idFunc foi removido) da criação da tabela e deverá conter todos os campos.

Agora, para vermos o funcionamento do UPDATE, vamos olhar para o sexo da Fulana. Sim, está errado, deveria ser F, portanto vamos concertar o erro utilizando o comando UPDATE.

UPDATE

Sintaxe:

UPDATE nome_tabela SET campo1 = dado1, campo2 = dado2 WHERE campo1 = dado9;

Temos então que a partir do comando SET indicamos os campos que serão alterados e os valores que receberão, em seguida o campo WHERE que é opcional, se caso o WHERE não se encontrar na expressão, TODOS os registros serão alterados. O WHERE funciona da mesma maneira do SELECT, contém condições.
Vamos concertar nosso problema do sexo da Fulana.

UPDATE clientes SET sexo = ‘F’ WHERE nome = ‘Fulana’;

Done!!

Bom, por enquanto é só, qualquer coisa deixe um comentário!!

Abraços!

Anúncios

9 Comentários »

  1. Pora velho….tava a procura de uma esplicação de sql…
    do nada o google me joga na sua pagina….
    valeu fico loko esse post…

    Comentário por Leandro — outubro 23, 2008 @ 10:47 am

  2. Olá! Como dou um insert caso na tabela tenha uma foreign key? Não posso inserir dads nesse campo, ele não permite.
    Banco Utilizado: MySql
    Linguagem Prog.: JAVA

    Abraço

    Comentário por Marcos — dezembro 18, 2008 @ 3:13 pm

  3. É obrigarotiamente necessário que o valor inserido no campo FK exista na tabela referência (PK).

    Comentário por Bogos — dezembro 18, 2008 @ 4:09 pm

  4. E como fica a sintaxe para inclusão do mesmo dado em 3 tabelas? Fiz assim, não deu erro, mas também não incluiu nas duas últimas:

    $sql = “insert into tb_usuario (NO_USUARIO, NU_CPF, DS_SENHA) values (‘$nome’, ‘$cpf’, ‘$senha’)”;
    $resultado = mysql_query($sql);

    $sql = “insert into rl_usuario_curso (NU_CPF) values (‘$cpf’)”;
    $resultado = mysql_query($sql);

    $sql = “insert into rl_usuario_empresa (NU_CPF) values (‘$cpf’)”;
    $resultado = mysql_query($sql);

    Onde está o erro?

    Comentário por Felipe — março 2, 2009 @ 2:48 pm

    • Use mysql_execute() invés de mysql_query() que deve ser usado para realizar consultas (SELECT). Procure adotar isso como padrão 😉
      Qualquer dúvida só comentar! Abraço!

      Comentário por Bogos — março 2, 2009 @ 3:29 pm

  5. Infelizmente, Bogos, a substituição da mysql_query() pelo mysql_execute() deu este erro: Call to undefined function mysql_execute().

    Comentário por Felipe — março 2, 2009 @ 5:33 pm

  6. Muito boa a explicação.
    Me ajudou muito…
    Obrigado.

    Comentário por Bruno — setembro 20, 2010 @ 2:29 pm

  7. Eu gostei muito desse post, bem detalhado e com um bom conteúdo.

    Comentário por Fabricio R. Silva — abril 3, 2013 @ 2:16 pm

  8. queria permitir o update de uma coluna de uma tabela, mas sem que o usuário possa apagar o que foi preenchido anteriormente. Como faço isso?

    Comentário por jeferson fiuza — fevereiro 12, 2016 @ 5:43 pm


RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

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

Foto do Google+

Você está comentando utilizando sua conta Google+. 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 )

Conectando a %s

Blog no WordPress.com.

%d blogueiros gostam disto: