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.
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.