SQL - Manipulação de Dados

Propaganda
SQL - Manipulação de Dados
André Restivo
Faculdade de Engenharia da Universidade do Porto
February 24, 2012
André Restivo (FEUP)
SQL - Manipulação de Dados
February 24, 2012
1/8
Sumário
1
Manipulação de Dados
2
Sequências
André Restivo (FEUP)
SQL - Manipulação de Dados
February 24, 2012
2/8
Manipulação de Dados
Inserções
O comando INSERT INTO é utilizado para inserir um novo tuplo
numa relação.
Se forem indicadas as colunas em que queremos inserir os dados, as
restantes ficarão com o seu valor por defeito ou nulas.
Podemos não indicar as colunas em que queremos inserir, sendo
neste caso obrigados a seguir a mesma ordem pela qual criamos a
tabela.
Exemplo
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
empregado
empregado
empregado
empregado
André Restivo (FEUP)
VALUES ( 1 2 , ’ J o a o ’ , 5 0 0 ) ;
( id , nome ) VALUES ( 1 2 , ’ J o a o ’ ) ;
VALUES ( 1 2 , ’ J o a o ’ , DEFAULT ) ;
VALUES ( 1 2 , ’ J o a o ’ , NULL ) ;
SQL - Manipulação de Dados
February 24, 2012
3/8
Manipulação de Dados
Remoções
Uma remoção não passa de uma pergunta em que indicamos que os
tuplos seleccionados devem ser removidos.
Para isso usamos o comando DELETE FROM juntamente com o
comando WHERE.
Se nenhuma coluna for seleccionada o SQL não retorna qualquer
tipo de erro.
Exemplo
DELETE FROM empregado WHERE s a l a r i o > 2 0 0 0 ;
DELETE FROM empregado WHERE b i = 1 2 3 4 ;
André Restivo (FEUP)
SQL - Manipulação de Dados
February 24, 2012
4/8
Manipulação de Dados
Actualizações
Podemos ainda actualizar qualquer dados já introduzido.
Para isso basta usar o comando UPDATE quais os campos a alterar
e para que valores, juntamente com o comando WHERE que indica
em que tuplos fazer as alterações.
Exemplo
UPDATE empregado
SET nome = ’ J o a o ’ , s a l a r i o = 1200
WHERE b i = 1 2 3 4 ;
André Restivo (FEUP)
SQL - Manipulação de Dados
February 24, 2012
5/8
Sequências
Sequências
Uma forma de conseguir campos auto-numerados seria, no momento de introduzir
um novo tuplo, calcular o máximo valor da coluna e incrementar uma unidade a esse
valor.
O problema desta abordagem é que os SGBD não garantem que não haja dois
utilizadores a executarem esta operação em simultâneo, ficando ambos com o
mesmo valor para um campo que em princípio é uma chave primária.
A forma correcta de calcular um novo valor para um campo auto-numerado é usando
sequências.
Uma sequência é um objecto que é capaz de devolver números, de uma forma
ordenada, garantindo que nunca devolve o mesmo número duas vezes.
Cria-se uma sequência da seguinte forma:
Exemplo
CREATE SEQUENCE i d _ e m p r e g a d o _ s e q ;
André Restivo (FEUP)
SQL - Manipulação de Dados
February 24, 2012
6/8
Sequências
Sequências : nextval e currval
O operador nextval permite obter um novo valor da sequência.
O operador currval retorna o último valor produzido pela sequência.
Este operador só e válido se o operador nextval tiver acabado de ser
utilizado e nunca devolve um valor que tenha sido dado a outro
utilizador.
Exemplo
INSERT INTO empregado
VALUES ( n e x t v a l ( ’ i d _ e m p r e g a d o _ s e q ’ ) ,
André Restivo (FEUP)
’ Joao ’ , 5 0 0 ) ;
SQL - Manipulação de Dados
February 24, 2012
7/8
Sequências
SERIAL
O tipo de dados SERIAL, de facto, não é um tipo de dados, mas sim
uma forma mais cómoda de criar uma coluna auto-numerada.
Os seguintes comandos são equivalentes:
Exemplo
CREATE TABLE d e p a r t a m e n t o (
i d SERIAL ,
designacao varchar
);
Exemplo
CREATE SEQUENCE i d _ d e p a r t a m e n t o _ s e q ;
CREATE TABLE d e p a r t a m e n t o (
i d i n t e g e r DEFAULT n e x t v a l ( ’ d e p a r t a m e n t o _ i d _ s e q ’ ) NOT NULL ,
designacao varchar
);
André Restivo (FEUP)
SQL - Manipulação de Dados
February 24, 2012
8/8
Download