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