104
Módulo 15 – Linguagem de Definição de Dados Programação e Sistemas de Informação

Psi-mod-15

Embed Size (px)

Citation preview

Módulo 15 – Linguagem de Definição de Dados

Programação e Sistemas de Informação

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Revisões Agora que já sabe … … o que é uma base de dados.

(Ai sei ???)

… esquematizar uma base de dados. (A sério???)

… fazer tabelas e estabelecer relacionamentos.

(Também??? Não sabia que … sabia tanto)

2

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Revisões Bem, se calhar é melhor fazer umas revisões antes …

n  Base de dados: Conjunto de dados organizados para servir um determinado propósito.

n  Sistema de gestão de base de dados: É um programa capaz de relacionar, definir, manipular e gerir dados. 3

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

SGBD

4

Base de Dados

S G B D

Programa A

Programa B

Programa C

Programa D

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Arquitectura de um SGBD

5 • Base de •  Dados

Nível Visualização

Nível Conceptual

Nível Físico

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

SQL n  Significa: Structured Query Language

n  Linguagem declarativa usada para definição e manipulação de dados em bases de dados relacionais

n  SQL não é uma linguagem procedimental

n  SQL é uma linguagem declarativa 6

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

SQL n  Inicialmente desenvolvida pela IBM em 1974 – SEQUEL n  Em 1982 o ANSI torna o SQL padrão oficial em ambiente

relacional n  A 1ª versão surge em 1986 com a designação SQL-86 n  Após algumas revisões - 1992 (SQL-92) e em 2003

(SQL-2003) n  Nova revisão - SQL3 (suporte a modelos orientados a

objectos)

7

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

SQL

n  SQL/DS e DB2 da IBM, ORACLE da Oracle Corporation, SYBASE da Sybase INC, e Microsoft SQL Server...

8

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Porquê SQL??? Vantagens … n  Independência do fabricante

n  Portabilidade entre computadores

n  Redução dos custos

n  Inglês estruturado de alto nível

n  Consulta interactiva

n  Definição dinâmica dos dados 9

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

SQL n  Linguagem de definição de dados

§  DDL (Data Definition Language) §  Instruções de definição do esquema da base

de dados n  Linguagem de manipulação de dados

§  DML (Data Manipulation Language) §  Instruções de programação de consultas e

transacções de manipulação da base de dados 10

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os Eu queria….

--- deixar de ser treinador

--- mudar de clube (SCP nunca)

--- ser treinador (mas só do grandioso )

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Como Programar … … em SQL??? Para isso, vamos utilizar um

SGBD

Lembram-se disto???

12

Na altura, falou-se na existência de vários, por qual optar???

No nosso caso, sem dúvidas … MySQL …

http://www.mysql.com/

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

MySQL - Vantagens Porquê optar por MySQL??? Para já, porque sim, apeteceu-nos … para além disso, apresenta um conjunto de vantagens, e à cabeça aparece logo:

n  Gratuito (abrangido pelas licenças GPL);

n  Bom desempenho;

n  Estabilidade;

n  Simplicidade de utilização;

n  Compatibilidade (existem módulos para diversas linguagens de programação: PHP, C++, Java, C#, Perl, …);

13

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

MySQL - Vantagens Ainda não está convencido??? Quanta exigência, mas não seja por isso:

n  Portabilidade (entre várias plataformas e sistemas);

n  Leveza (não é por se pegar nele, mas por exigir poucos recursos de hardware);

n  Existem diversos interfaces gráficos que permitem fazer a sua administração de uma forma simples;

n  …

Ufaaaaaa … Agora sim, já chega … convencidíssimo …

14

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP … O quê??? Para trabalhar com MySQL, vai ser necessário instalar o

WAMP (existem outros programas similares, por exemplo: XAMPP)

Está disponível no site

http://www.wampserver.com/en/

Também já está disponível na Dropbox …

15

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP … O quê??? Mas, o que significa isso de WAMP??? Joguemos então ao jogo da adivinha …

W

A

M

P

16

… de Sistema Operativo Windows;

… de distribuição de Servidor Web Livre Apache;

… de SGBD MySQL;

… de linguagem de scripting muito utilizada para sites web dinâmicos: PHP;

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP … O quê??? O objetivo do WAMP é então instalar no Windows (em pacote offline), de forma:

§  Simultânea;

§  Simples;

§  Rápida …

… o Apache, o MySQL e o PHP … … desta forma, é possível elaborar um site dinâmico e experimentá-lo na sua máquina (localmente) como se estivesse a “executá-lo” num servidor web.

17

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Ficha de trabalho 9

Instale o WAMP no seu computador … 18

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP Já está instalado??? É a velha técnica do …

… Next … Next … Next …

Depois de efectuada a instalação, deve ter no Ambiente de Trabalho um atalho semelhante a:

19

Se clicar nele, automaticamente será lançado o WAMP … cuidado, baixem-se … e ficará disponível na barra de notificações:

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP Inicialmente os serviços estarão parados: Tem de os iniciar:

20 Todos …

… ou um a um.

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP Será que já está a funcionar??? Apesar de o verde nem sempre ser bom agoiro, parece que sim … Se não estiver, tente … Reiniciar todos os Serviços …

21

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP Outra forma é verificar a página de

localhost (127.0.0.1) no browser. 22

Em que se tudo estiver bem, deve aparecer a página:

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP - phpMyAdmin §  Totalmente desenvolvido em PHP;

§  Interface Web para administração de MySQL. Torna automático o processo de:

§  Criar / Remover bases de dados;

§  Criar / Remover / Alterar tabelas;

§  Inserir / Remover / Editar campos;

§  Executar códigos SQL;

§  …

23

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP - phpMyAdmin

Tão simples … Tão simples …

Que vamos ver outra forma mais à frente …

24

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP – Diretório WWW Tanto o diretório WWW como o phpMyAdmin vão ser aprofundados na disciplina de RC …

25

Pasta onde ficam colocados os códigos / programas, nomeadamente em PHP …

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP – Consola MySql Que tal, como puristas e adeptos (… ferrenhos …) da programação, utilizar a consola do MySql para programar? Excelente ideia … não fosse ela nossa … 26

E olhem que coisa mais linda:

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP – Consola MySql Modo consola??? Então deixe adivinhar … hmmmm … São comandos … comandos … e, não sei se já disse, comandos.

27

Comecemos então a espreitar alguns comandos SQL ...

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

WAMP – Consola MySql Eis a nossa consola, não confundir com outras consolas … Inicie a sessão como root, não necessita de password … Mais tarde, falaremos de utilizadores e privilégios.

28

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Comandos – Consola MySQL Quais as bases de dados que tem criadas, ou que vêm por defeito com o MySQL??? Nada mais simples, a qualquer momento faça:

show databases;

Como resultado, obtém uma lista com o nome de todas as bases de dados …

29

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Comandos – Consola MySQL Quer utilizar uma das bases de dados da listagem anterior?

use [nome_da_BD];

30 Muda a ação para a BD que escolheu usar … pode fazer as mais variadas ações sobre ela …

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Comandos – Consola MySQL Quais as tabelas que a BD anterior contém??? show tables;

31

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Comandos – Consola MySQL Quais os atributos que defini para uma tabela e respectivos tipos???

describe [nome_da_tabela];

32

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Bases de Dados MySQL Até agora foram apenas comandos genéricos … não confundir com os medicamentos Sendo assim, é melhor começar pelo inicio, certo??? E uma coisa é certa … … como não se pode criar tabelas sem uma … … base de dados … 33

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Bases de Dados MySQL … comecemos então por criar uma base de dados:

create database [nome_base_dados]; (IMPORTANTE: Não esquecer o “;” no final das instruções …)

SUCESSO … O que faz a query anterior??? Agora precisa de dizer ao MySQL que quer utilizar essa BD, como???

34

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas Já sabe criar Bases de Dados … Já sabe passar a ação para dentro da BD que escolheu … O que falta??? Além de animar a malta??? Exatamente, criar tabelas dentro dessa BD. E como se diz criar tabela em Inglês??? Cultura geral:

create table 35

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas É isso mesmo, nada mais simples, criar uma tabela é só:

create table [nome_da_tabela] (

nome_atributo1 tipo_dados1, nome_atributo2 tipo_dados2 … );

36

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas Imagine o seguinte código para uma tabela Contactos:

37

Comente Linha create table Contactos Cria tabela Contactos

( Abre lista de atributos

p_nome varchar(40), Atributo primeiro nome com até 40 carateres

u_nome varchar(30), Atributo último nome com até 30 carateres

email varchar(50), Atributo email com até 40 carateres

aniversário date, Atributo aniversário que guarda valor da data

morada varchar(60), Atributo morada com até 60 carateres

telefone integer, Atributo telefone que é conjunto de números inteiros

interesses varchar(100) Atributo interesses com até 100 carateres

); Fecha lista de atributos e termina o comando com ;

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas A tabela anterior traduzir-se-ia na consola MySQL em: Como pode verificar: Qual o comando que usou para visualizar os atributos da tabela e respectivos tipos???

38 describe contactos;

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas - Tipos Depois de tanto se falar em tipos de dados, está na altura de os conhecermos:

39

INT ou INTEGER Números inteiros

positivos ou negativos

CHAR ou CHARACTER Conjunto de caracteres

com determinado tamanho (pouco flexível)

DATETIME ou TIMESTAMP

Regista a data e a hora

DEC ou DECIMAL Números decimais

VARCHAR Até 255 caracteres. Flexível porque se

adapta ao tamanho dos dados até ao tamanho.

DATE Guarda as datas

sem ligar às horas

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas - Tipos Os tipos anteriores são mais ou menos usuais. Mas imagine que quer guardar um ficheiro binário, por exemplo, uma imagem …

Utilizaria o tipo de dados…

… BLOB (Binary Large Object)

Que pode ser de 4 tipos: §  TINYBLOB – 8 bits §  BLOB – 16 bits §  MEDIUMBLOB – 24 bits §  LONGBLOB – 32 bits

40

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas Outras questões se alevantam … e se o atributo …

... for chave primária??? In English please: PRIMARY KEY

… for não nulo??? In English please: NOT NULL

… tiver valor por defeito??? In English please: DEFAULT

41

Que leitura faz desta tabela???

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Tabelas Veja as diferenças com o describe (DESC):

42

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Eliminação de BD / Tabelas Livramo-nos de uma tabela é mais simples que criá-la:

drop table [nome_da_tabela];

Assim como de uma base de dados, alguém quer tentar???

drop database [nome_da_BD];

Utilize este comando com muito cuidado … Vocês sabem do que estou a falar …

43

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Alteração de Tabelas Não me diga que se me enganar, ou esquecer algum atributo, tenho de reescrever tudo de novo. Até podia ser, mas … não era a mesma coisa … basta então utilizar:

alter table [nome_da_tabela] ADD / CHANGE / MODIFY / DROP COLUMN

[nome_do_atributo] [tipo] Permite definir a posição da coluna:

First, Last, Before [campo], After [campo] Nota: comando pode conter várias linhas de uma mesma forma(vários add), ou mesmo, a conjugação de diferentes formas (add + change).

44

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Alteração de Tabelas Quais são então as alterações possíveis? ALTER TABLE [Nome_Tabela] ADD à atributo à BD com o respetivo tipo;

ADD Nome_Atributo Definições_Atributo CHANGE à nome e tipo de um determinado atributo;

CHANGE Nome_Atributo Novo_Nome Definições_Novo_Atributo MODIFY à tipo de dados ou posição de um atributo;

MODIFY Nome_Atributo Tipo_Atributo DROP à um atributo da tabela (elimina);

DROP COLUMN Nome_Atributo RENAME à uma tabela

RENAME TO Novo_Nome

Vantagem: pode-se utilizar sem que as alterações afetem os dados. 45

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Alteração de Tabelas - Exemplo Vejamos um exemplo já conhecido, mas propositadamente modificado … Se quiser adicionar um atributo que seja chave primária, não nulo e de auto-incremento:

46

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Alteração de Tabelas - Exemplo O resultado final seria este: Fácil, barato … só não dá milhões €€€€€

47

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Ficha de trabalho nº 10

48

Criação de Base de Dados e Tabelas em MySQL

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Ficha de trabalho nº 11

49

Criação de Base de Dados e Tabelas em MySQL

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Utilização de Índices n  Já foram falados no Módulo 13 será que vale a pena??? n  E lá diz o poeta:

50

O que lhe faz lembrar a palavra índice??? E qual a sua função???

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Utilização de Índices

n  Imagine uma BD com poucos registos

n  Imagine que essa BD cresceu e tem agora milhares de

registos

51

neste caso, pesquisa será rápida e o desempenho da BD será óptimo.

agora, a pesquisa tornou-se mais lenta. Quem quer tentar???

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Utilização de Índices Definição formal de índice: n  Índices ou estruturas de acesso secundárias são

estruturas de dados auxiliares que visam minimizar o tempo de acesso a registos em resposta a operações de procura sobre determinados atributos.

52

… ou então leio o índice….

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Utilização de Índices n  O problema não está na quantidade de registos mas na

forma como se efetuam as consultas (Módulo 14 – a ver )

n  A utilização de índices prende-se exatamente com questões: l  de eficiência performance l  Quais o Benefícios da utilização de índices??? l  Aumento da performance; l  Utilização de mais do que um índice; l  Fácil implementação.

53

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Utilização de Índices Mas existem algumas contrapartidas: n  É criado bloco de informações separado… n  … que necessita de atualização

(optimize table [nome_da_tabela])

n  A ideia é que sendo o ficheiro de índices mais pequeno que o ficheiro de registos, podemos tê-lo em memória e usá-lo para localizar mais depressa os registos nos blocos em disco. 54

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Utilização de Índices - Ilustração n  Imagine uma tabela com os registos das compras efectuadas pelos

clientes e as respectivas datas, mas sem qualquer (coluna) atributo indexado.

55

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

q  Agora já se obteve uma tabela de índices criada sobre os dados da coluna: Cod_Cliente

Utilização de Índices - Ilustração

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Consegue observar as vantagens??? Ainda não Hmmm n  Imagine que quer saber os registos do cliente 13

l  Sabe exatamente a localização desses registos; l  Estão ordenados…. l  …consequentemente, chega ao 14 e pára.

n  Consegue imaginar a mesma tabela sem índices e com milhões de registos??? n  Não se metam nisso, é melhor…

57

Utilização de Índices

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Designar chaves primárias cria índice nesse atributo; n  Devem ser aplicados apenas quando necessários (facilita a

pesquisa / consulta, mas dificulta a atualização para além do aumento do espaço em disco )

n  Pode haver mais do que um índice numa tabela, os chamados índices compostos;

n  Escolhas dos atributos que serão índices deve ser criteriosa e incidir sobre as pesquisas (e respetivos atributos) mais comuns.

Nota: Por alguns dos motivos apresentados, muita atenção na escolha dos índices… em vez de estar a optimizar a BD, pode estar a torná-la ainda mais pesada.

58

Utilização de Índices - Observações

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Criação de Índices – CREATE INDEX n  Agora que já está um mestre em Índices, que tal passar

da teoria à prática com mais uns… comandos SQL… n  Quer Criar Índice, ou seja,

59

q  UNIQUE não permite que existam valores duplicados. q  FULLTEXT só podem indexar colunas CHAR, VARCHAR e TEXT.

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

• Criar Tabela e Índice:

Criação de Índices – INDEX

Utilizando o exemplo do cliente, criar uma tabela e índice:

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

• Criar Tabela e Índice:

Criação de Índices – CREATE INDEX n  Utilizemos o mesmo exemplo, mas neste caso…

l  Primeiro cria-se a tabela

l  E só depois é que é criado o índice

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Utilização de Índices – DROP INDEX n  O que falta??? Além de animar a malta, mais uma vez… … é eliminar um índice, o famoso DROP:

62

DROP INDEX índice_nome ON nome_tabela

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Ficha de trabalho nº 12

63

Trabalhar com índices em Tabelas

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Transações n  O conceito de transação é-vos familiar, em que

situação???

Toca a puxar pela cabeça, mas devagarinho para não aleijar Claro, é o exemplo clássico da transferência bancária xiiiii, pois é… Individuo A Individuo B

64

pretende transferir 1000€ para (quem é o sortudo???)

Uma transação / transferência bancária, não é mais do que o depósito numa conta (B) e levantamento noutra (A), mas então … Qual o problema? Desde que o depósito seja na nossa …

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Transações n  … mas não é bem assim. Quais as duas ações / consultas

que é preciso fazer (e cujos comandos iremos abordar no próximo módulo):

n  Depositar o valor na conta de destino (individuo B);

n  Retirar o mesmo valor da conta de origem (individuo A)

O que aconteceria se falhasse uma das condições: §  A luz falhava antes de colocar o dinheiro na conta de destino §  Dinheiro é colocado na conta de destino, mas não é atualizado na

origem Todas as ações têm de ser feitas para concluir a operação senão, não deve ser tida em conta nenhuma delas. 65

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  É isso mesmo. Em linguagem popular, pode-se definir transação como um

Tudo ou Nada n  E isto sem exageros, uma vez que: n  Uma transação consiste numa unidade lógica de trabalho. n  Se for composta por um conjunto de passos,

ou se realizam todos (Tudo) ou não se realiza nenhum (Nada). 66

Transações

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Transações n  Aplicando o conceito ao exemplo da transferência bancária: n  Objetivo é ter certeza que as duas contas são movimentadas.

l  Senão, nenhuma delas deverá ser mexida, l  independentemente da ordem das operações (comandos).

n  Em SQL, início de transação é definido: l  De forma implícita, depois de uma outra ter sido terminada; l  Através de comando de início de transação (pode diferir dependendo do sistema

que está a utilizar )

67

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  No nosso caso, define-se uma transação da seguinte forma:

n  Independentemente de como se inicia, termina sempre com:

n  Um Commit; n  Ou um Rollback.

68

Transações – Definir em SQL

START TRANSACTION <COMANDOS E INSTRUÇÕES A EXECUTAR> COMMIT/ROLLBACK

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  E perguntam vocês: Qual a diferença entre commit e rollback? n  Commit -> dados que são alterados durante uma transação são

guardados de forma temporária à espera que o utilizador passe as alterações a definitivas, precisamente com este comando;

n  Rollback -> ignora todas as alterações desde o início da transação e

deixa a BD no estado em que se encontrava antes. Vai ver que é possível retornar a um ponto da transação para começar a partir daí.

n  Atenção: depois de executar um commit não pode executar um

rollback 69

Transações – COMMIT e ROLLBACK

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Funciona como o Checkpoint de um jogo. Alguém falou em jogo? n  Quem??? Quem???

n  Mas, já que o assunto veio à baila: n  O que é o checkpoint de um jogo? n  Se perder a vida, depois de um determinado Checkpoint, existe a

possibilidade de retomar o jogo a partir desse ponto n  O SAVEPOINT acaba por funcionar de forma similar: n  Obriga na mesma à realização da totalidade das operações (ou nenhuma); n  Permite que se faça ROLLBACK até um SAVEPOINT; n  Podem-se colocar vários ao longo da transação.

70

Transações – SAVEPOINT

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Transações – SAVEPOINT n  Em código, que é isso que todo o aluno de PSI gosta…

71

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Aplicam-se a comandos de manipulação de dados, como: l  INSERT; l  UPDATE; l  DELETE.

n  Serão estudadas no Módulo 14 é que é já, já, já a seguir…

n  Se apagar uma tabela com drop table… só lhe resta uma alternativa… e só mesmo essa rezar…. 72

Transações

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Ficha de trabalho nº 13

73

Aplicação Teórica de Transações

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Neste caso, quando se fala em segurança, refere-se a: n  Privilégios sobre os elementos da BD; n  Controlo de acesso à BD.

n  Com aquilo que aprendeu e fez até agora, acha que as

suas BD estão seguras??? n  É fácil, basta pensar no seguinte: n  Qual o login e a password que coloca para aceder às

BD??? 74

Segurança

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Dá que pensar, não é verdade??? Meeeeeeedo…. n  Neste momento tem quantos utilizadores na BD???

l Um n  Qual?

l root (utilizador priveligiado que controla tudo)

n  Tem password?

l Não, por defeito é vazia. l Então que fazer???

75

Segurança

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Para começar, que tal atribuir uma password ao root??? n  Proteger o root, mas que bela e pioneira ideia…

SET PASSWORD FOR ”root”@”localhost” = PASSWORD(”123456”);

n  Nome do utilizador: root n  Local onde está instalado o SQL: localhost (neste caso localmente)

poderia ser num servidor (exemplo: [email protected], não é um email) n  Password: 123456, pass escolhida para o user root

76

Segurança – Atribuir Password

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Segurança - Experiência n  Que tal experimentar??? Força… Sem medos…

1.  Abra o MySQL e entre como habitualmente, sem password;

2.  Utilize a forma do slide anterior para atribuir password ao utilizador root;

3.  Depois de estar tudo OK, feche a consola, volte a abrir e tente entrar

sem password. O que aconteceu??? Espero que alguma coisa …

Exato, a consola fechou logo, é necessário colocar a password anterior.

4.  Agora sim, conseguiu entrar no modo consola como root parece tudo

bem, que tal experimentar o phpMyAdmin()… mas o que aconteceu??? 77

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Erro??? Não é possivel aceder ao phpMyAdmin??? Mas porquê???

78

Segurança - Experiência

Toca a pensar o problema está onde??? q  No acesso ao phpMyAdmin; q  Por causa da password que acabei de criar; q  Que deve estar num ficheiro de

configuração; Que raciocínio fantástico, ainda por cima correto. Outra forma de fazer alterar password

de root :

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Onde se encontram os ficheiros do phpMyAdmin()???

c:\wamp\apps\phpmyadmin 5.  Entre na pasta anterior e abra o ficheiro config.inc.php;

6.  Abra o ficheiro (Notepad++), encontre a linha:

$cfg['Servers'][$i]['password'] = ‘ ‘;

E modifique-a para

$cfg['Servers'][$i]['password'] = ‘password de root definida em 2'; 79

Segurança - Experiência

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Faça o refresh do phpMyAdmin ou abra-o a partir do WAMP; n  Agora sim, já deve ter acesso ao phpMyAdmin… … se modificar a password volte a repetir o processo

80

Segurança - Experiência

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Segurança – Criar Utilizadores n  Agora que é um pro em BD, cá vai uma pergunta, mas

sem rasteira: onde é que o SQL guarda a informação sobre os utilizadores???

n  Essa é fácil, óbvio que é numa… aiiiii…. TABELA, isso….

n  Para aceder a uma área pessoal precisa de ter:

81

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Isso é tudo muito bonito, mas não vi nada sobre os utilizadores mesmo desconfiados, continuando….

3. select * from user; (será abordado no Módulo 14)

Ainda está confuso??? Que tal ver os atributos da tabela: 4. desc user; n  Quais os campos que pretende visualizar??? n  Nome do utilizador (user) e a password 82

Segurança – Criar Utilizadores

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Visualizemos então a informação pretendida: n  5. select user, password from user;

83

Finalmente tanta coisa para isto, não há uma maneira mais fácil??? Bem, por acaso até há phpMyAdmin Privileges:

§  Adicione / Elimine utilizadores; §  Conceda / Retire Privilégios; §  Altere Passwords

Segurança – Criar Utilizadores

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Sintaxe

n  Exemplos

84

Segurança – Criar Utilizadores

CREATE USER user_specification [, user_specification] ...

user_specification:

user [IDENTIFIED BY [PASSWORD] 'password']

CREATE USER 'joaquim'@'localhost';

CREATE USER 'joaquim'@'localhost' IDENTIFIED BY 'mypass';

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Eliminar utilizadores é muito mais simples e exige muito menos ginástica mental.

n  Qual o comando que tem utilizado para apagar??? n  Exactamente, o drop então:

drop user ‘nome_utilizador’@’host’;

n  Simples e eficaz exemplo: drop user ‘daniela’@’localhost’; 85

Segurança – Eliminar Utilizadores

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Mas… como posso aceder a uma sessão MySQL??? n  Belíssima questão…. n  Vamos falar agora de e linha de comandos:

Aceda a: MySql_HOME (mesmo que dizer pasta do MySQL)/bin E execute o comando: mysql –u [nome_utilizador] -p

86

Segurança – Sessão MySQL

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Não está a funcionar??? Será que definiu o utilizador em localhost???

87

Segurança – Sessão MySQL

É um pormenor, mas de classe e daqueles que faz toda a diferença…

Agora sim, está pronto para iniciar sessão mysql no localhost. Faça show databases e repare nas BD que aparece,

Qualquer host

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Segurança - Privilégios n  Neste momento temos um utilizador que não tem

permissões para fazer nada, pouco útil, não é verdade??? n  Apesar de todos serem utilizadores:

l  Root tem permissão para executar qualquer comando SQL; l  Utilizadores criados de novo não têm privilégios.

n  Existe forma de alterar esta situação??? n  Em informática tudo tem solução... ou não...

88

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Segurança – Privilégios … Grant n  Por isso é que existe o comando… GRANT

Este comando permite… ... controlar, de forma precisa, aquilo que cada utilizador pode fazer com as

tabelas e respetivas colunas.

n  Ou seja, l  Apenas alguns utilizadores podem modificar determinadas tabelas; l  Dados de uma tabela acessíveis apenas a determinados utilizadores; l  Alguns utilizadores podem ver atributos que outros não podem.

Para atribuir privilégios faça um levantamento cuidadoso daquilo que cada utilizador precisa de fazer na BD.

89

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Imagine uma BD muito simples, sobre Encomendas e os seguintes utilizadores:

90

Segurança – Privilégios … Grant

Implemente-a, bem como os utilizadores

Rute… ou antes: root

Olegário Vanessa Óscar

Felisberta Ambrósio Albertina

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Neste ponto… … apenas o utilizador root pode efetuar operações sobre a BD.

…nenhum dos outros utilizadores tem permissões para fazer o que quer que seja na BD. n  Imagine que a menina Felisberta trabalha no atendimento ao público e

precisa de selecionar (SELECT) informação da tabela (ON) Cliente…

n  é preciso conceder (GRANT) permissão à (TO) Felisberta para que possa ter acesso à tabela Cliente e possa selecionar a informação necessária. 91

Segurança – Privilégios … Grant

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Segurança – Privilégios … Grant n  Para isso, utiliza-se o comando:

GRANT SELECT ON Cliente -> concede permissão de select na tabela Cliente TO Felisberta -> para a utilizadora Felisberta

92

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Algumas particularidades do comando anterior:

n  Atribuir mais que um privilégio ao mesmo tempo: GRANT SELECT, DELETE, INSERT, UPDATE ON Cliente TO Felisberta, Ambrósio, Albertina; n  Atribuir mesmos privilégios numa tabela a múltiplos utilizadores: GRANT SELECT ON Encomenda TO Ambrósio, Albertina; n  Atribuir privilégios para apenas um atributo de uma tabela: GRANT SELECT(Nome) ON Cliente TO Felisberta

93

Segurança – Privilégios … Grant

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Abreviar todas as permissões com ALL: GRANT ALL ON Produto TO Felisberta, Ambrósio, Albertina;

n  Um utilizador pode atribuir as suas permissões a outro com: GRANT DELETE ON Cliente TO Felisberta WITH GRANT OPTION;

n  Mesma permissão, para o mesmo utilizador, mas tabelas diferentes, obriga a descriminar um GRANT para cada uma das tabelas: GRANT SELECT ON Cliente TO Felisberta; GRANT SELECT ON Produto TO Felisberta;

94

Segurança – Privilégios … Grant

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Que tal dar uma espreitadela a uma breve lista de privilégios:

95

Segurança – Privilégios … Grant

Privilégio Descrição SELECT Permite selecionar todas as colunas de uma determinada tabela

SELECT (Lista) Permite selecionar as colunas especificadas em lista

INSERT

Permite inserir registos em todas as colunas da tabela

INSERT (Lista)

Permite inserir valores na lista das colunas de uma tabela

UPDATE

Permite alterar conteúdos em todas as colunas da tabela

UPDATE (Lista)

Permite alterar o conteúdo da lista das colunas da tabela

DELETE

Permite apagar registos de uma tabela

ALL [PRIVILEGES]

Permite atribuir todos os privilégios acima especificados

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Pergunta para queijinho, mas não é desses. n  Mas será que já ninguém joga Trivial Pursuit??? n  Assim está melhor (Dica: utilize o * sabendo que significa match com qualquer string, mesmo a vazia) n  Como acha que poderia fazer para dar o privilégio SELECT, à Dona Felisberta, para todas as tabelas da BD Encomendas:

GRANT SELECT ON Encomendas.* TO Felisberta; 96

Segurança – Privilégios … Grant

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  E se houvesse um comando que:

Ao mesmo tempo que se criasse um utilizador: create user Felisberta identified by ‘semprefelisebela’;

Desse para atribuir / conceder os privilégios: grant select on Cliente to Felisberta;

n  Bem, isso era genial chamaram??? Os seus desejos são ordens

grant select on Cliente to Felisberta identified by ‘semprefelisebela’;

97

Segurança – Privilégios … Grant

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Lá diz a velha máxima, quem dá também tira. n  Que é como quem diz, quem dá privilégios…. ... tem de ter forma de os tirar e nem vamos falar da Troika.

n  Vamos falar sim do comando, REVOKE:

98

Segurança – Privilégios … Revoke

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Imagine que afinal a Dona Felisberta foi promovida para outro setor e já não precisa da permissão de SELECT na tabela Cliente, muito simples:

REVOKE SELECT ON Cliente -> remove o privilégio SELECT FROM Felisberta; -> do utilizador Felisberta n  Diferenças para o GRANT??? Mais visíveis é difícil:

l  Em vez de GRANT tem REVOKE; l  Em vez de TO (conceder a) tem FROM (remover de)

99

Segurança – Privilégios … Revoke

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Pergunta… Será que é possível remover WITH GRANT OPTION n  Pode fazê-lo deixando o respetivo privilégio intacto. Como assim???

REVOKE GRANT OPTION ON DELETE ON Cliente FROM Felisberta;

n  Com este comando: l  Felisberta continua a poder utilizar o comando DELETE; l  Mas deixa de poder atribuir esse privilégio a outros utilizadores

100

Segurança – Privilégios … Revoke

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  Que tal usar agora um brasileirismo, revokando do conhecido verbo revokar eu revoko, tu revokas, ele revoka

101

Segurança – Privilégios … Revoke

Imagine a seguinte situação:

Rute Vanessa Óscar

Atribui privilégio SELECT com GRANT OPTION na tabela Produto à

Que passa esse privilégio ao

Como fazer o REVOKE??? E qual o impacto na Vanessa e no Óscar… Isto vai dar problemas … ou não…

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

n  “Revokando” com precisão, duas formas de abordar a questão: n  REVOKE SELECT ON Produto FROM Vanessa CASCADE; Remove privilégios do utilizador alvo (Vanessa) e de todos aqueles a quem ele concedeu permissões (Óscar) efeito dominó (por defeito, se não colocar nada, é este ) n  REVOKE SELECT ON Produto FROM Vanessa RESTRICT; Dá erro se quiser remover os privilégios de um utilizador que concedeu privilégio(s) a outro(s). n  Neste caso, ocorreria um erro e ambos os utilizadores continuariam

com os seus privilégios, uma vez que a Vanessa concedeu privilégio. 102

Segurança – Privilégios … Revoke

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

Ficha de trabalho nº 14

103

Segurança, Utilizadores e Privilégios

Mód

ulo

15 –

Lin

guag

em d

e D

efin

ição

de

Dad

os

The End…

104