Linguagem de Definição de Dados. Linguagem de Manipulação de Dados 2 SQL - DDL (Data Definition...

Post on 21-Apr-2015

140 views 3 download

Transcript of Linguagem de Definição de Dados. Linguagem de Manipulação de Dados 2 SQL - DDL (Data Definition...

Linguagem deDefinição de Dados

Linguagem de Manipulação de Dados 2

SQL - DDL (Data Definition Language) Comandos essenciais: Create, Alter e Drop Criação e eliminação de bases de dados Criação, alteração e eliminação de tabelas Criação e eliminação de índices

SQL - DML (Data Manipulation Language) Comando Insert Comando Update Comando Delete

Transações Privilégios e controlo de acessos

Conteúdos

A linguagem SQL disponibiliza um conjunto de comandos para criação (CREATE), alteração (ALTER) e eliminação (DROP) de tabelas e outras estruturas.

Estes comandos fazem parte da sublinguagem denominada DDL – Linguagem de Definição de Dados.

Linguagem de Manipulação de Dados 3

SQL – DDL(Data Definition Language)

A sintaxe do comando de criação de bases de dados é: CREATE DATABASE Nome_da_Base_de_Dados

A sintaxe do comando de eliminação de bases de dados é: DROP DATABASE Nome_da_Base_de_Dados

Linguagem de Manipulação de Dados 4

Manipulação de Bases de Dados

Manipulação de Tabelas

A criação de tabelas é realizada recorrendo ao comando CREATE TABLE.

Para alterar a estrutura de uma tabela recorre-se a comando ALTER TABLE.

A eliminação de uma tabela é possível através do comando DROP TABLE. Sintaxe: DROP TABLE Nome_da_Tabela

Linguagem de Manipulação de Dados 5

Sintaxe:

CREATE TABLE Nome_da_Tabela(NomeCampo1 Tipo,NomeCampo2 Tipo)

Tipos de Dados Strings: text, text(n), varchar, varchar(n), char(n) Inteiros: int, integer, smallint, numeric(n) Reais: float, numeric, real Data/hora: date, datetime Moeda: money

Linguagem de Manipulação de Dados 6

CREATE TABLE

Crie uma tabela para armazenar códigos postais: um número inteiro e uma string com 50 caracteres.

CREATE TABLE CodigosPostais(Codigo int,Localidade varchar(50))

Linguagem de Manipulação de Dados 7

CREATE TABLE - Exemplo

Na criação de uma tabela é ainda possível: Especificar se uma coluna pode ou não admitir

valores nulos (vazios). Para isso utilizam-se as cláusulas NULL ou NOT NULL.

Especificar qual o valor por defeito de uma coluna através da cláusula DEFAULT.

Nota: O valor por defeito de uma coluna é aplicado/utilizado quando não é introduzido um valor para essa coluna, na criação ou atualização de registos.

Linguagem de Manipulação de Dados 8

CREATE TABLE

Crie uma tabela para armazenar códigos postais: um número inteiro e uma string com 50 caracteres. O código não pode ser vazio e a localidade por defeito deve assumir o valor ‘Lisboa’.

CREATE TABLE CodigosPostais(Codigo int NOT NULL,Localidade varchar(50) DEFAULT ‘Lisboa’)

Linguagem de Manipulação de Dados 9

CREATE TABLE - Exemplo

Um dos requisitos do modelo relacional é que cada tabela deve possuir uma chave primária.

Deste modo, para a definição da chave primária de uma tabela utiliza-se a cláusula PRIMARY KEY.

Para a definição de chaves estrangeiras utilizam-se as cláusulas: REFERENCESOU

FOREING KEY (…) REFERENCES … (…)

Linguagem de Manipulação de Dados 10

CREATE TABLE - Chaves

Crie uma tabela para armazenar códigos postais: um número inteiro e uma string com 50 caracteres. Defina o código como chave primária.

CREATE TABLE CodigosPostais(Codigo int NOT NULL,Localidade varchar(50) NOT NULL,PRIMARY KEY(Codigo))

Linguagem de Manipulação de Dados 11

CREATE TABLE - Exemplo

Crie uma tabela CodigosPostais para armazenar o código e a localidade. Em seguida crie uma tabela Pessoa para armazenar um código, nome e o código referente ao código postal.

Linguagem de Manipulação de Dados 12

CREATE TABLE CodigosPostais(CodPostal int,Localidade varchar(50),PRIMARY KEY(CodPostal))

CREATE TABLE Pessoa(CodPessoa int,Nome varchar(100),CPostal int REFERENCES CodigosPostais(CodPostal),PRIMARY KEY(CodPessoa))

CREATE TABLE - Exemplo

Exemplo da outra forma de definição de chaves estrangeiras.

Linguagem de Manipulação de Dados 13

CREATE TABLE CodigosPostais(CodPostal int,Localidade varchar(50),PRIMARY KEY(CodPostal))

CREATE TABLE Pessoa(CodPessoa int,Nome varchar(100),CPostal int,FOREIGN KEY(CPostal) REFERENCES CodigosPostais(CodPostal), PRIMARY KEY(CodPessoa))

CREATE TABLE – Exemplo

Comando utilizado para efectuar alterações na estrutura de uma tabela. Seguem-se alguns exemplos.

Adição de um campo a uma tabela: ALTER TABLE NomeTabela ADD NomeCampo Tipo

Remoção de um campo a uma tabela: ALTER TABLE NomeTabela DROP NomeCampo

Alteração do tipo de dados de um campo: ALTER TABLE NomeTabela MODIFY NomeCampo Tipo

Linguagem de Manipulação de Dados 14

ALTER TABLE

DROP TABLE

Comando responsável pela eliminação de uma tabela.

A sintaxe do comando é:

DROP TABLE Nome_da_Tabela

Nota: O comando apaga a tabela especificada e todos os seus dados. Depois de executado o comando, não existe qualquer forma de “desfazer” esta operação.

Linguagem de Manipulação de Dados 15

Permitem uma consulta mais rápida sobre os campos definidos como índice.

A sintaxe do comando de criação de índices é:

CREATE [UNIQUE] INDEX Nome_do_IndiceON Nome_da_Tabela (Coluna1 [ASC|DESC], ..)

Exemplo – Criar um índice sobre a coluna Localidade da tabela CodigosPostais.CREATE INDEX Ind_Local ON CodigosPostais (Localidade)

Linguagem de Manipulação de Dados 16

Manipulação de Índices

Manipulação de Índices

Para eliminar um índice utiliza-se o comando DROP INDEX.

A sintaxe do comando é: DROP INDEX Nome_do_Indice ON Nome_Tabela

Exemplo – Eliminação do índice do slide anterior DROP INDEX Ind_Local ON CodigosPostais

Linguagem de Manipulação de Dados 17

A linguagem SQL responsável pela manipulação dos dados existentes numa base de dados (nomeadamente em tabelas).

A manipulação dos dados de uma tabela é possível através dos comandos: INSERT – Criação de novos registo. UPDATE – atualização de registos existentes. DELETE – Eliminação de registos.

Linguagem de Manipulação de Dados18

SQL – DML(Data Manipulation Language)

O comando INSERT permite realizar a introdução de novos registos numa tabela da base de dados.

A sintaxe é: INSERT INTO Nome_da_Tabela(Campo1,…,CampoN)VALUES (Valor1, … , ValorN)

OU INSERT INTO Nome_da_TabelaVALUES (Valor1, … , ValorN)

Linguagem de Manipulação de Dados 19

Comando INSERT

Assumindo a tabela ‘CodigosPostais’ adicione um novo registo com os valores 3720 e Oliveira de Azeméis.

INSERT INTO CodigosPostais(CodPostal,Localidade)VALUES (3720, ‘Oliveira de Azeméis’)

OUINSERT INTO CodigosPostais

VALUES (3720, ‘Oliveira de Azeméis’)

NOTA: o formato abreviado obriga a fazer a introdução de valores para todas as colunas da tabela.

Linguagem de Manipulação de Dados 20

Comando INSERT - Exemplo

O comando UPDATE permite atualizar valores já existentes nos campos de uma tabela.

A sintaxe é: UPDATE Nome_da_Tabela SET

Campo1 = Valor1,… ,CampoN = ValorN,

[WHERE Condição] A cláusula WHERE permite restringir quais os

registos a serem processados. Se omitida todos os registos serão atualizados.

Linguagem de Manipulação de Dados 21

Comando UPDATE

Assumindo a tabela ‘Pessoa’ atualize o nome do registo com o código 10 para ‘João’.

UPDATE Pessoa SETNome = ‘João’

WHERE CodPessoa = 10

atualize o código postal de todos os registos para 3720.

UPDATE Pessoa SETCpostal = 3720

Linguagem de Manipulação de Dados 22

Comando UPDATE - Exemplo

Comando DELETE

O comando DELETE permite eliminar registos de uma tabela.

A sintaxe do comando é: DELETE FROM Nome_da_Tabela[WHERE Condição]

A cláusula WHERE permite restringir os registos a serem eliminados. Se omitida todos os registos da tabela são eliminados.

Linguagem de Manipulação de Dados 23

Assumindo a tabela ‘Pessoa’ elimine o registo com o código 90.

DELETE FROM Pessoa WHERE CodPessoa = 90 Apague todos os registos da tabela.DELETE FROM Pessoa Apague todos os registos da tabela com o código

postal 3701.DELETE FROM Pessoa WHERE CPostal = 3701

Linguagem de Manipulação de Dados 24

Comando DELETE - Exemplo

Consiste num conjunto de passos inter-relacionados em que ou se realizam todos ou não se realiza nenhum.

Ou seja, trata-se de um conjunto de ações de devem ser executadas de forma sequencial. No entanto, caso uma das ações falhe (ocorrência de erro) todas as ações devem parar e falhar.

Linguagem de Manipulação de Dados 25

Transações

Suponhamos que um indivíduo A pretende transferir 1000 Eur da sua conta para a conta de um indivíduo B.

Ora a transferência corresponde à diminuição do saldo da conta do indivíduo A e ao aumento do saldo da conta do indivíduo B.

Ora em código SQL esta transferência dá origem a dois comandos UPDATE: Um para atualizar a conta do indivíduo A Outro para atualizar a conta do indivíduo B

Linguagem de Manipulação de Dados 26

Transações - Exemplo

UPDATE Tabela_Conta SETSaldo = Saldo – 1000

WHERE Conta = ‘Conta A’

UPDATE Tabela_Conta SETSaldo = Saldo + 1000

WHERE Conta = ‘Conta B’

Ora, o que aconteceria se existisse algum problema apenas fosse realizado um dos UPDATES?

Ficaria um cliente com mais saldo e outro com o mesmo? Ficaria um cliente com menos saldo e o outro com o mesmo?

É aqui que surge o conceito de Transação, para resolução de problemas deste género.

Linguagem de Manipulação de Dados 27

Transações - Exemplo

Um transação inicia-se com o comando BEGIN TRANSACTION. Após este comando devem ser colocadas as instruções inter-relacionadas.

A transação será finalizada através de um dos comandos: COMMIT – torna todas as alterações definitivas. ROLLBACK – elimina as alterações realizadas,

ficando a base de dados no estado em que se encontrava antes da transação ser iniciada.

Linguagem de Manipulação de Dados 28

Transações

Resolução do problema anterior.

BEGIN TRANSACTIONUPDATE Tabela_Conta SET

Saldo = Saldo – 1000WHERE Conta = ‘Conta A’

UPDATE Tabela_Conta SETSaldo = Saldo + 1000

WHERE Conta = ‘Conta B’COMMIT

Linguagem de Manipulação de Dados 29

Nota: se durante a execução de um dos UPDATES ocorrer um problema então executa-se o comando ROLLBACK (em vez do COMMIT) para retroceder as operações realizadas. Assim, garante-se que ou todas as ações são realizadas com sucesso ou nenhuma é efectuada.

Transações - Exemplo

Privilégios e controlo de acessos

Os sistemas de gestão de bases de dados permitem essencialmente dois tipos de segurança: Controlo de acesso de utilizadores através do

conjunto Login/Password; Definição dos privilégios dos utilizadores (que

operações e a que objetos o utilizador pode aceder).

Linguagem de Manipulação de Dados 30

Controlo de Acessos

Sintaxe para a criação de utilizadores:

CREATE USER Nome_UtilizadorIDENTIFIED BY Palavra_Chave

Exemplo:

CREATE USER User_PsiIDENTIFIED BY ‘PSI_2009’

Linguagem de Manipulação de Dados 31

Sintaxe para a atualização de utilizadores:ALTER USER Nome_Utilizador

IDENTIFIED BY Nova_Palavra_Chave Exemplo:ALTER USER User_Psi

IDENTIFIED BY ‘PSI_09’

Sintaxe para a eliminação de utilizadores:DROP USER Nome_Utilizador

Exemplo:DROP USER User_Psi

Linguagem de Manipulação de Dados 32

Controlo de Acessos

Definição de Privilégios

Sintaxe para a atribuição de privilégios:

GRANT Privilégio ON objetoTO Utilizador

Exemplo:

GRANT SELECT, INSERT ON PessoaTO User_Psi

Linguagem de Manipulação de Dados 33

Os privilégios podem ser:

Linguagem de Manipulação de Dados 34

SELECT Permite seleccionar dados da tabela.

SELECT(lista) Permite seleccionar as colunas especificadas.

INSERT Permite inserir registos na tabela.

INSERT(lista) Permite inserir valores nas colunas especificadas.

UPDATE Permite alterar registos na tabela.

UPDATE(lista) Permite alterar os valores das colunas especificadas.

DELETE Permite apagar registos da tabela.

REFERENCES Permite referenciar todas as colunas da tabela.

REFERENCES(lista) Permite referenciar as colunas especificadas da tabela.

EXECUTE Permite a execução de Stored Procedures.

ALL Atribui todos os privilégios.

Definição de Privilégios

Definição de Privilégios

Sintaxe para a remoção de privilégios:

REVOKE Privilégio ON objetoFROM Utilizador

Exemplo:

REVOKE SELECT ON Pessoa FROM User_Psi

Linguagem de Manipulação de Dados 35

Referências

DAMAS, Luís: SQL, FCA

Linguagem de Manipulação de Dados 36