Comandos INSERT/UPDATE/DELETE

Trataremos agora de alguns comandos de manipulação de dados (Data Manipulation Statements). Específicamente, abordaremos os comandos Insert, Update e Delete. Estes comandos servem para inserirmos, editarmos e deletarmos os dados, ou seja, alterarmos os valores das tabelas. Eles não devolvem, como os do grupo Select, um conjunto de dados (Result Set). Pelo contrário, eles apenas operam modificações nos dados.
OBS: Para os usuários do componente TQuery do Delphi, estes comandos devem ser executados utilizando o método ExecSQL e não Open, como era o caso com o os que devolvem um conjunto de dados.

Vamos dar uma olhada em nossa tabela de clientes :

SELECT * FROM CLIENTES
Resultado :
COD_C  NOME           SEXO  ENDERECO              BAIRRO    TELEFONE  RENDA_MENSAL  
-----  ----           ----  --------              ------    --------  ------------  
1      MARCOS POSTO      M  R. Tortuosa, 22       ALEGRIA   765-4321      5.500,00  
2      FERNANDO NANDO    M  R. da Lama, 31        TRISTEZA  775-7771        500,00  
3      MAURICIO MAURO    M  Tv. Transversa, 11    BELEZA    765-3333      2.200,00  
4      MARINA MAURA      F  R. Descida, 27        ALEGRIA   765-8765      3.000,00  
5      MIRIAM SOLO       F  Ld. do Escorrega, 2   TRISTEZA  777-7272      1.000,00  
6      THEREZA RIOS      F  R. da Praça, 15       BELEZA    787-7877      3.000,00  

Exemplo 22:
Precisamos fazer as seguintes alterações em nossa tabela Clientes :
1 - Inserir um novo cliente com os seguintes dados :
COD_C = 7
NOME = MAURICIO AZEDO
SEXO = M
ENDEREÇO = Ladeira Ingreme, 22
BAIRRO = ALEGRIA
TELEFONE = nào consta
RENDA MENSAL = 3.300,00
2 - Retirar da tabela (deletar) a cliente MARINA MAURA. (Alguns possíveis motivos para isso pode ser falecimento, mudança para outro estado, etc...)
3 - Mudar o endereço e o telefone da MIRIAM SOLO para Ladeira Ingreme, 23//Tel 777-7372

Para o item 1)

INSERT INTO CLIENTES
(COD_C,NOME,SEXO,ENDERECO,BAIRRO,TELEFONE,RENDA_MENSAL)
VALUES ('7','MAURICIO AZEDO','M','Ladeira Ingreme, 22','ALEGRIA',NULL,3300)

Nota1 : Os nomes das colunas são dispensáveis desde que observada a ordem de ocorrência. Assim sendo, o comando abaixo teria o mesmo efeito que o anterior :

INSERT INTO CLIENTES
VALUES ('7','MAURICIO AZEDO','M','Ladeira Ingreme, 22','ALEGRIA',NULL,3300)

Nota2 : Pode-se usar um comando Select para incluir uma ou várias linhas.
Para testar, faça uma cópia da tabela Clientes com o nome XCLIENTES.
OBS: Você pode usar o DataBaseDesktop da Borland para fazer isso.

O comando :
DELETE FROM XCLIENTES
esvaziará a tabela (Empty).
Execute o comando que se segue e verifique que a tabela XCLIENTES vai conter o cod_c 6.

INSERT INTO XCLIENTES
SELECT * FROM CLIENTES
WHERE COD_C = '6'

Para o item 2)

DELETE FROM CLIENTES
WHERE NOME = 'MARINA MAURA'

ATENÇÃO : DELETE SEM A CLAUSULA WHERE DELETA TODAS AS LINHAS DA TABELA, OU SEJA, ESVAZIA A TABELA.

Para o item 3)

UPDATE CLIENTES
ENDERECO ='Ladeira Ingreme, 23', TELEFONE='777-7372'
WHERE NOME = 'MIRIAM SOLO'

ATENÇÃO : UPDATE SEM A CLAUSULA WHERE ATUA EM TODAS AS LINHAS DA TABELA.

 

 

Comandos CREATE TABLE, CREATE INDEX, DROP TABLE, DROP INDEX, ALTER TABLE

Trataremos agora de alguns comandos de manipulação de dados (Data Definition Statements). Específicamente, veremos Create/Drop Table e Create/Drop Index e Alter Table.

CREATE TABLE "funcionário.db"
(
sobrenome CHAR(20),
nome CHAR(15),
salario NUMERIC(10,2),
setor SMALLINT,
PRIMARY KEY (nome,sobrenome)
)

Criamos uma tabela para Paradox (para DBase, use .dbf na extensão do nome) com os campos indicados e um índice primário composto por 2 campos.

Os seguintes tipos de colunas são permitidos no SQL Local:
SMALLINT, INTEGER, DECIMAL[(s[, p])], NUMERIC[(s[, p])], FLOAT(s, p), CHARACTER(length), VARCHAR(length), DATE, BOOLEAN, BLOB(length, type), TIME , TIMESTAMP, MONEY, AUTOINC , BYTES(length).
OBS:) 1 )s - escala ou tamanho, p - precisão (ex.: NUMERIC(15,2) = numérico 15 posições, 2 decimais.
2) Para DBase e Paradox VARCHAR será transformado em CHAR;
3) Para campos BLOB, além do comprimento, deve-se indicar um dos seguintes tipos :
Memo(1)Binary (2), Formatted Memo (3), OLE (4), Graphic/Binary (5).

DROP TABLE "funcionário.db", deleta a tabela criada anteriormente;

 

CREATE [UNIQUE] [ASC | DESC] INDEX index_reference ON table_reference (column_reference [,column_reference...])

Create Index deve ser usado para criar índices secundários em tabelas. Para Paradox pode-se usar múltiplas colunas, para DBase só uma coluna.

UNIQUE indica que a chave é única. ASC (default)indica valores ascendentes e Desc valores descendentes.

Exemplos :
CREATE INDEX data_pedido ON "pedidos.db" (num_pedido,data_venda), cria um índice secundário com duas colunas;

CREATE UNIQUE INDEX namex ON "funcionarios.dbf" (nome_funcionario), cria um índice secundário, único;

DROP INDEX "funcionario.dbf".namex, deleta o índice criado anteriormente;

 

ALTER TABLE "funcionário.db"
DROP Sobrenome, ADD Sobrenome(25) ,
altera o tamanho do campo criado anteriormente.

Observações :
1 - Se houver valores no campo alterado, estes serão perdidos.
2 - Se o campo for componente de índice primário, este terá que ser refeito.