Vous êtes sur la page 1sur 41

07/10/2015

2015/2016

3 TSI

Jorge Pina

Mdulo 15
Linguagem de Definio de Dados
Programao e Sistemas de Informao

Definio

AERBP

Jorge Pina

A linguagem SQL (Structured


Query
Language)

uma
linguagem declarativa.

Permite ao utilizador expressar


aquilo que pretende sem ter que
entrar em grandes detalhes sobre
a localizao fsica dos componentes.

07/10/2015

Comandos


Existem quatro tipos de comandos SQL:




AERBP

Os DML (Data Manipulation Language) que


permitem gerar consultas para filtrar e
ordenar dados da base de dados.
Os DDL (Data Definition Language) que
permitem criar e definir novas bases de
dados, campos e ndices.

Os TCL (Transactional Control Language)


que permitem o controlo de transaces.

Os DCL (Data Control Language) que


permitem o controlo de acesso aos dados.

Jorge Pina

Comandos DML
COMANDO DESCRIO
SELECT

INSERT
AERBP

UPDATE
Jorge Pina

DELETE
4

Consulta registos da base de


dados
que
satisfaam
um
determinado critrio.
Carrega conjuntos de dados na
base de dados numa nica
operao.
Modifica os valores dos campos e
registos especificados.
Elimina registos de uma tabela de
uma base de dados.

07/10/2015

Comandos DDL

COMANDO DESCRIO
CREATE

Cria novas tabelas, campos e


ndices.

DROP

Elimina tabelas e ndices.

ALTER

Utilizado para modificar as tabelas


agregando campos ou alterando
a definio dos campos

AERBP

Jorge Pina

Comandos TCL

COMANDO DESCRIO
COMMIT

Permite efectivar transaces

ROLLBACK

Permite anular transaces

AERBP

Uma transaco um conjunto de operaes


Jorge Pina

07/10/2015

Comandos DCL

COMANDO DESCRIO
GRANT
AERBP

REVOKE

Permite conceder privilgios


aos utilizadores da base de
dados.
Permite retirar privilgios aos
utilizadores da base de dados.

Jorge Pina

Comando INSERT (1)




Considere as tabelas pessoas e cpostais:

pessoas

AERBP

Jorge Pina

07/10/2015

Comando INSERT (2)




Considere as tabelas pessoas e cpostais


(cont.):
cpostais

AERBP

Jorge Pina

Comando INSERT (3)


INSERT INTO tabela (campo1, campo2, )
VALUES (valor1, valor2, )
OU

AERBP

Jorge Pina

INSERT INTO tabela


VALUES (valor1, valor2, )


Permite realizar a introduo de registos


numa tabela.

10

07/10/2015

Comando INSERT (4)




INSERT INTO cpostais(cpostal,


VALUES (1250, Mouraria)

localidade)

INSERT INTO cpostais(localidade,


VALUES (Bairro Alto, 1250)

INSERT INTO cpostais VALUES (1270, Boa


Hora)

cpostal)

AERBP


Jorge Pina

Insere registos na tabela cpostais com os


valores definidos (ex:1250 e Mouraria).

11

Comando INSERT (5)





AERBP

INSERT INTO pessoas(id, nome, idade, salario,


cpostal) VALUES (NULL, Armindo Torres, 35,
750, 2500)
INSERT INTO pessoas(nome, idade, salario,
telefone, cpostal) VALUES (Armindo Torres,
35, 750, NULL, 2500)
INSERT INTO pessoas VALUES (NULL, Armindo
Torres, 35, 750, NULL, 2500)


Insere registos na tabela pessoas com os


valores Armindo Torres, 35, 750, 2500.

O NULL no primeiro campo significa que


este AUTO_INCREMENT.

Jorge Pina

12

07/10/2015

Comando INSERT (6)


INSERT INTO tabela(campo1, campo2, )
SELECT
INSERT INTO tabela
SELECT


O comando INSERT utilizado desta forma,


permite inserir numa tabela conjuntos de
registos que existem noutra tabela.

A tabela tem que ser criada previamente


com os mesmos campos e tipos de dados.
Se tal no acontecer poder existir perda
de informao (tabela jovens, com os mesmos campos
da tabela pessoas).

AERBP

Jorge Pina

13

Comando INSERT (7)




INSERT INTO jovens(id, nome, idade, salario,


telefone, cpostal) SELECT * FROM pessoas
WHERE idade <= 30
INSERT INTO jovens SELECT * FROM pessoas
WHERE idade <= 30


AERBP

Insere os registos da tabela pessoas, cujo


valor do campo idade seja igual ou inferior
a 30, na tabela jovens.

Jorge Pina

14

07/10/2015

Comando INSERT (8)




O comando INSERT falhar nas seguintes situaes:




Inserir mais do que uma vez o mesmo valor no campo que


chave primria;

Inserir mais do que uma vez o mesmo valor num campo


com ndice nico;

Inserir o valor NULL num campo NOT NULL;

Um dos campos obrigatrios ignorado;

AERBP

O tipo de dados enviados na componente VALUES no


est de acordo com o que foi definido em cada um dos
campos;

Jorge Pina

O nmero de campos diferente dos valores associados;

Existe algum tipo de restrio no campo a que os dados


no obedecem.

15

Comando UPDATE (1)


UPDATE tabela [alias]
SET campo1 = {expresso1, query1},
campo2 = {expresso2, query2},

[WHERE condio]
AERBP

Os parntesis rectos indicam que essa componente


facultativa.

Jorge Pina

Permite alterar os valores j existentes


nos campos de uma nica tabela.

16

07/10/2015

Comando UPDATE (2)




AERBP


Jorge Pina

17

UPDATE pessoas SET salario = salario * 1.1


 Aumenta o salrio de todas as pessoas
em 10%.
UPDATE pessoas SET salario = salario * 1.1
WHERE nome LIKE %Antnio Dias%
 Aumenta o salrio do Antnio Dias em
10%.
UPDATE jovens SET salario = (SELECT
MAX(salario) FROM pessoas) WHERE nome
LIKE %Clia Morais%
 Aumenta o salrio da Clia Morais para
um valor igual ao maior salrio.

Comando DELETE (1)


DELETE FROM tabela
[WHERE condio]
Os parntesis rectos indicam que essa componente
facultativa.


AERBP

Permite apagar conjuntos de registos


existentes numa nica tabela.

Jorge Pina

18

07/10/2015

Comando DELETE (2)




DELETE FROM pessoas WHERE nome


LIKE %Armindo Torres%



AERBP

DELETE FROM pessoas WHERE id NOT IN


(SELECT DISTINCT id FROM comissoes)


Jorge Pina

Apaga o registo cujo campo nome


Armindo Torres.

Apaga os registos referentes a pessoas


que no tm qualquer comisso.

19

Comandos DDL

COMANDO DESCRIO
CREATE

Cria novas tabelas, campos e


ndices.

DROP

Elimina tabelas e ndices.

ALTER

Utilizado para modificar as tabelas


agregando campos ou alterando
a definio dos campos

AERBP

Jorge Pina

20

10

07/10/2015

Comando CREATE TABLE (1)


CREATE TABLE tabela (
campo1, tipo,
campo2, tipo,
)

AERBP

Permite criar uma tabela em modo


texto.

Jorge Pina

21

Comando CREATE TABLE (2)

AERBP

Jorge Pina

A criao da tabela implica definir o tipo de


dados de cada campo.

Para alm dos tipos nativos da linguagem


SQL, cada SGBD pode ainda disponibilizar
tipos de dados prprios.

Contudo, de maneira geral os tipos de


dados podem ser agrupados da seguinte
forma:


String

Numeric

Date and Time

22

11

07/10/2015

Comando CREATE TABLE (3)




CREATE TABLE xcpostais (cpostal


localidade VARCHAR(30))


INT(4),

Cria uma tabela denominada xcpostais com um


campo do tipo INT e outro do tipo VARCHAR.

Cada campo pode ter, para alm do nome


e do tipo de dados, outras caractersticas
como:

AERBP

Jorge Pina

NOT NULL

UNIQUE

DEFAULT

FOREIGN KEY

PRIMARY KEY

CHECK

AUTO_INCREMENT

23

Cada campo poder ter uma


ou vrias destas caractersticas

Comando CREATE TABLE (4)




CREATE TABLE ycpostais (cpostal INT(4),


localidade VARCHAR(30) NOT NULL)



AERBP

CREATE TABLE zcpostais (cpostal INT(4),


localidade
VARCHAR(30)
DEFAULT
Lisboa)


Jorge Pina

Nesta tabela o campo localidade no


pode ser NULL, ou seja, vazio.

Nesta tabela, se nenhum valor for definido


para o campo localidade, inserida a
palavra Lisboa

24

12

07/10/2015

Comando CREATE TABLE (5)




CREATE TABLE wcpostais (cpostal INT(4)


PRIMARY KEY, localidade VARCHAR(30))



AERBP

CREATE TABLE xcomissoes (id INT, id_msg


INT, valor DECIMAL(7,2), PRIMARY KEY(id,
id_msg))


Jorge Pina

Nesta tabela o campo cpostal chave


primria, ou seja, no se pode repetir e
no pode ser nulo.

Nesta tabela existe uma chave primria


composta, constituda pelos campos id e
id_msg.

25

Comando CREATE TABLE (6)




AERBP

CREATE TABLE xempregados (


id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(25),
apelido VARCHAR(25),
idade INT,
bi INT,
genero CHAR,
anos_servico INT

)
Jorge Pina

Nesta tabela, o campo id chave primria e


incrementado automaticamente sempre que se
insere mais um registo.

26

13

07/10/2015

Comando CREATE TABLE (7)




AERBP

CREATE TABLE yempregados (


id INT,
nome VARCHAR(25),
apelido VARCHAR(25),
idade INT,
bi INT UNIQUE,
genero CHAR,
anos_servico INT,
UNIQUE(nome, apelido)

Jorge Pina


27

Nesta tabela, o campo bi no se pode repetir e


o conjunto constitudo pelos campos nome e
apelido tambm no.

Comando CREATE TABLE (8)




A caracterstica FOREIGN KEY s funciona


com tabelas InnoDB.

Em MySQL, por omisso as tabelas so


MyISAM.

MyISAM vs InnoDB



AERBP

Jorge Pina

28

Nas consultas o MyISAM mais rpido;


Nas alteraes o InnoDB mais rpido;
O InnoDB suporta chaves estrangeiras
transaces.

CREATE TABLE kcpostais (cpostal


INT(4)
PRIMARY KEY, localidade VARCHAR(30))
ENGINE = InnoDB

14

07/10/2015

Comando CREATE TABLE (9)




AERBP

CREATE TABLE xpessoas (


id INT, nome VARCHAR(50),
idade INT, salario DECIMAL(7,2),
telefone INT(9), cpostal INT(4),
INDEX (cpostal),
FOREIGN KEY (cpostal) REFERENCES kcpostais
(cpostal)
)
ENGINE = InnoDB (


Nesta tabela, o campo cpostal uma chave


estrangeira e est validada, ou seja, no se podem inserir
cdigos postais na tabela xpessoas que no existam na
tabela kcpostais.

Neste caso, est a admitir-se que o campo cpostal da


tabela kcpostais chave primria.

Jorge Pina

29

Comando CREATE TABLE (10)




AERBP

CREATE TABLE ypessoas (


id INT, nome VARCHAR(50),
idade INT, salario DECIMAL(7,2),
telefone INT(9), cpostal INT(4),
INDEX (cpostal),
FOREIGN KEY (cpostal) REFERENCES kcpostais (cpostal)
ON UPDATE CASCADE
ON DELETE CASCADE
)
ENGINE = InnoDB


Se um valor do campo cpostal da tabela kcpostais


for
alterado,
essa
alterao

propagada
automaticamente para a tabela ypessoas.

Se um registo da tabela kcpostais for apagado, sero


apagados todos os registos correspondentes na tabela
ypessoas.

Jorge Pina

30

15

07/10/2015

Comando CREATE TABLE (11)




A caracterstica CHECK aceite pelo


MySQL mas ignorada por todos os tipos
de tabela (MyISAM, InnoDB, )

CREATE TABLE acpostais (cpostal INT(4),


localidade VARCHAR(30) NOT NULL
CHECK (localidade NOT LIKE Faro))

AERBP


Jorge Pina

Nesta tabela o campo localidade no


pode ser NULL, ou seja, vazio e no pode
conter a palavra Faro.

31

Comando CREATE TABLE (12)




AERBP

CREATE TABLE zempregados (


id INTEGER,
nome VARCHAR(25),
apelido VARCHAR(25),
idade INTEGER,
bi INTEGER,
genero CHAR,
anos_servico INTEGER,
CHECK (idade >= anos_servico + 18)

Jorge Pina


32

Nesta tabela, o campo idade no pode conter


um valor que seja inferior ao nmero de anos de
servio mais 18.

16

07/10/2015

Comando CREATE TABLE (13)




CREATE TABLE tabela AS query




Permite criar uma tabela a patir de outra tabela j


existente.

CREATE TABLE wpessoas AS SELECT id, nome,


salario FROM pessoas WHERE idade > 30


A tabela wpessoas ficar com trs campos com


o mesmo tipo de dados dos campos da tabela
pessoas.

Caractersticas como PRIMARY KEY e AUTO


INCREMENT no so passadas para a nova tabela.

Os registos que passaro da tabela pessoas para


a tabela wpessoas sero apenas aqueles cujo
valor do campo idade seja superior a 30.

AERBP

Jorge Pina

33

Comando ALTER TABLE (1)




AERBP

Permite alterar a estrutura de uma


tabela.


ALTER TABLE tabela ADD campo, tipo

ALTER TABLE tabela MODIFY campo, tipo

ALTER TABLE tabela DROP campo

ALTER TABLE tabela RENAME TO NovoNome

Jorge Pina

34

17

07/10/2015

Comando ALTER TABLE (2)




ALTER TABLE xpessoas ADD fax VARCHAR(9)




ALTER TABLE
VARCHAR(14)


AERBP

Jorge Pina

Acrescenta tabela xpessoas o campo


fax .

xpessoas

MODIFY

fax

Modifica o campo fax de 9 para 14


caracteres.

ALTER TABLE xpessoas DROP fax




Apaga o campo fax.

35

Comando DROP TABLE




DROP TABLE tabela




Permite apagar uma tabela eliminando


toda a estrutura e os registos l existentes.

DROP TABLE xpessoas




Apaga a tabela xpessoas.

AERBP

Jorge Pina

36

18

07/10/2015

Comandos CREATE
e DROP DATABASE


CREATE DATABASE bd


DROP DATABASE bd


AERBP

Permite criar uma base de dados.

Permite apagar uma base de dados.

Tanto na criao de bases de dados como de


tabelas, sempre que se tentar criar e o nome j
exista, ocorrer um erro.

Para que o erro no ocorra, dever-se-


acrescentar, sintaxe de criao, IF NOT EXISTS;

Jorge Pina

37

Comandos CREATE

Tanto na criao de bases de dados como


de tabelas, sempre que se tentar criar e o
nome j exista, ocorrer um erro.

Para que o erro no ocorra, dever-se-


acrescentar, sintaxe de criao, IF NOT
EXISTS;

AERBP

Jorge Pina

CREATE DATABASE IF NOT EXISTS nomeBaseDados

CREATE TABLE IF NOT EXISTS nomeTabela(campos)

38

19

07/10/2015

Comandos TCL

COMANDO DESCRIO
COMMIT

Permite efectivar transaces

ROLLBACK

Permite anular transaces

AERBP

Uma transaco um conjunto de operaes


Jorge Pina

39

Comandos
COMMIT e ROLLBACK (1)


AERBP

Jorge Pina

40

Suponhamos que um indivduo A pretende


transferir 1000 euros da sua conta bancria
para a conta bancria de um indivduo B.

Esta
operao
corresponde
a
um
levantamento de uma conta e depsito na
outra.

Em SQL a operao seria efectuada atravs


de duas instrues UPDATE:
 UPDATE tabela_contas SET saldo = saldo 1000 WHERE conta = conta A
 UPDATE tabela_contas SET saldo = saldo +
1000 WHERE conta = conta B

20

07/10/2015

Comandos
COMMIT e ROLLBACK (2)


Este o exemplo de uma operao em que


todas as instrues (UPDATE) tm que ser
executadas.

No poder nunca acontecer que os 1000


euros sejam debitados numa conta sem que
sejam creditados na outra (execuo do
primeiro UPDATE).

Tambm no poder acontecer que os 1000


euros sejam creditados numa conta sem que
sejam debitados na outra (execuo do
segundo UPDATE).

AERBP

Jorge Pina

41

Comandos
COMMIT e ROLLBACK (3)


Transaco - consiste numa unidade lgica


de trabalho em que todas as instrues so
executadas ou em que nenhuma das
instrues executada.

No exemplo visto anteriormente, para que a


operao decorra sem problemas tem que
se garantir que, ou so executadas ambas
as instrues UPDATE ou no executada
nenhuma.

A operao de transferncia de dinheiro


consiste ento numa transaco.

AERBP

Jorge Pina

42

Este exemplo leva-nos ao conceito de


transaco.

21

07/10/2015

Comandos
COMMIT e ROLLBACK (4)


AERBP

Todas as transaces comeam com a


instruo START TRANSACTION e terminam
com a instruo COMMIT ou ROLLBACK.
COMMIT converte em definitivas todas as
alteraes realizadas desde o incio da
transaco.
ROLLBACK elimina as alteraes realizadas
desde o incio da transaco ficando a base
de dados inalterada.

Jorge Pina


43

O conceito de transaco s se aplica aos


comandos que fazem a manipulao de
dados, isto , INSERT, UPDATE e DELETE.

Comandos
COMMIT e ROLLBACK (5)


Nos Sistemas de Gesto de Bases de


Dados (SGBD) actuais, as tabelas do tipo
InnoDB so sempre processadas dentro do
contexto de transaces.

Mesmo que a operao seja constituda


por apenas uma instruo esta ser
executada dentro de uma transaco.

A maior parte das transaces so


portanto
iniciadas
automaticamente
porque uma transaco comea quando
outra termina.

AERBP

Jorge Pina

44

22

07/10/2015

Comandos
COMMIT e ROLLBACK (6)


Esta automatizao acontece porque nos


SGBDs actuais o modo autocommit est
activo, ou seja, com o valor 1, por
predefinio

Para desactivar o modo autocommit utilizase a instruo seguinte:




AERBP

SET autocommit = 0

Jorge Pina

45

Comandos
COMMIT e ROLLBACK (7)
START TRANSACTION;
INSERT INTO kcpostais VALUES (3800, Aveiro)


AERBP

Jorge Pina

46

Se executar as duas instrues anteriores o


registo no ser inserido uma vez que no
utilizada a instruo commit ou rollback

START TRANSACTION;
INSERT INTO kcpostais VALUES (3800, Aveiro);
COMMIT
START TRANSACTION;
INSERT INTO kcpostais VALUES (3800, Aveiro);
ROLLBACK

23

07/10/2015

Comandos DCL

COMANDO DESCRIO
GRANT
AERBP

REVOKE

Permite conceder privilgios


aos utilizadores da base de
dados.
Permite retirar privilgios aos
utilizadores da base de dados.

Jorge Pina

47

Comandos
GRANT e REVOKE (1)

AERBP

Jorge Pina

Os Sistemas de Gesto de Bases de


Dados
(SGBD)
actuais
tm
mecanismos que permitem garantir a
segurana dos dados armazenados.

Uma das formas de fazer esse controlo


determinar quem pode aceder
base de dados e uma vez l dentro
quais as instrues que pode
executar.

48

24

07/10/2015

Comandos
GRANT e REVOKE (2)


Para os exemplos destes comandos,


ire-se- utilizar a consola MySQL da
linha de comandos;

Para o efeito, no painel de controlo


do xampp, no Menu do lado direito,
clica-se no boto shell

AERBP

Jorge Pina

49

Comandos
GRANT e REVOKE (3)

AERBP

Jorge Pina

50

Aps ter entrado na consola da linha


de comandos, digite cd mysql\bin;

Aps estar posicionado no diretorio


correto, digite mysql -u <nome de
utilizador*> -p;

Por defeito, o utilizador ativo ser o utilizador root, que


embora tenha privilgios de administrador, apresentase sem password de acesso, pelo que, por questes
de segurana, ser aconselhado que se adicione
uma.
set password for root@localhost = password(password);

25

07/10/2015

Comandos
GRANT e REVOKE (4)


O administrador root, no s, tem


acesso a todas as bases de dados,
como pode manipular todos os seus
dados ou, inclusive, criar e conceder
privilgios a outros utilizadores.

AERBP

Jorge Pina

51

Comandos
GRANT e REVOKE (4)


Para se retirar ou alterar a Password,


digita-se:
UPDATE mysql.user SET Password =
PASSWORD ( ou New_PassWord)
WHERE User=root;

AERBP

FLUSH PRIVILEGES;
Jorge Pina

52

26

07/10/2015

Comandos
GRANT e REVOKE (5)


Criar um utilizador com acesso de localhost




Jorge Pina

xpto@localhost

IDENTIFIED

BY

Criar um utilizador com acesso de qualquer


host


AERBP

CREATE USER
123456

CREATE USER xpto@'% IDENTIFIED BY 123456

Conceder privilgios para tudo e para


aceder a tudo (todas as bases de dados e
todas as tabelas), para todos os utilizadores


GRANT ALL PRIVILEGES ON *.* TO PUBLIC

53

Comandos
GRANT e REVOKE (6)


AERBP


Jorge Pina

54

Conceder privilgios para tudo e para


aceder a tudo (todas as bases de dados e
todas as tabelas), para o utilizador xpto, a
partir de localhost


GRANT ALL PRIVILEGES ON *.* TO xpto@localhost


WITH GRANT OPTION

Nota: a opo WITH GRANT OPTION permite


conceder as permisses recebidas a terceiros

Conceder privilgios para tudo e para


aceder a tudo (todas as bases de dados e
todas as tabelas), para o utilizador xpto, a
partir de qualquer host


GRANT ALL PRIVILEGES ON *.* TO xpto@% WITH


GRANT OPTION

27

07/10/2015

Comandos
GRANT e REVOKE (7)


Conceder privilgios para tudo em todas as


tabelas da base de dados bd1, para o
utilizador xpto, a partir de qualquer host


AERBP

Conceder privilgios para tudo mas apenas


na tabela tabela1 da base de dados
bd1, para o utilizador xpto, a partir de
qualquer host


Jorge Pina

GRANT ALL ON bd1.* TO xpto@%

GRANT ALL ON bd1.tabela1 TO xpto@%

55

Comandos
GRANT e REVOKE (8)


Conceder privilgios para executar a


instruo SELECT em todas as tabelas de
todas as bases de dados, para o utilizador
xpto a partir de qualquer host



AERBP

Jorge Pina

Conceder privilgios para executar a


instruo SELECT, no campo campo1, da
tabela tabela1, da base de dados bd1,
para o utilizador xpto, a partir de qualquer
host


56

GRANT SELECT ON *.* TO xpto@%

GRANT SELECT(campo1)
xpto@%

ON

bd1.tabela1

TO

28

07/10/2015

Comandos
GRANT e REVOKE (9)


Mostrar os privilgios do utilizador actual




Mostrar os privilgios do utilizador xpto




REVOKE ALL PRIVILEGES, GRANT OPTION FROM


xpto@%

Retirar o previlgio de executar a instruo


SELECT sobre as tabelas da base de dados
bd1, do utilizasdor xpto


57

SHOW GRANTS FOR xpto@%

Retirar todos os previlgios ao utilizador


xpto

AERBP

Jorge Pina

SHOW GRANTS;

REVOKE SELECT ON bd1.* FROM xpto@%

Comandos
GRANT e REVOKE (10)


Os previlgios tm que ser retirados numa


proporo igual ou maior do que aquela
com que foram concedidos:


A instruo


Implica a utilizao da instruo




AERBP

REVOKE SELECT ON *.* FROM xpto@%

Ou da instruo

Jorge Pina

58

GRANT SELECT ON *.* TO xpto@%

REVOKE ALL PRIVILEGES, GRANT OPTION FROM


xpto@%

Em vez da instruo


REVOKE SELECT ON bd1.* FROM xpto@%

29

07/10/2015

Comandos
GRANT e REVOKE (11)


Alterar a password do utilizador xpto




SET PASSWORD FOR xpto = PASSWORD(P45sword)

Eliminar um utilizador


DROP USER xpto

AERBP

Jorge Pina

59

VIEWS (1)


Suponhamos que na tabela pessoas existia


Informao geral (nome, morada, telefone,
...), Informao contabilstica (salrios,
subsdios,
...)
e
Informao
mdica
(hepatites, sida, drogas, )

No faz sentido que o departamento de


contabilidade tenha acesso aos dados
mdicos de cada pessoa;

O pessoal mdico no dever ter acesso ao


salrio que cada pessoa aufere;

Ambos os servios devero ter acesso aos


dados de informao geral.

AERBP

Jorge Pina

60

30

07/10/2015

VIEWS (2)


As views resolvem a necessidade de


diferentes utilizadores verem a mesma
tabela ou tabelas de formas distintas.

Uma view consiste num comando


select realizado sobre uma ou vrias
tabelas ou ainda sobre outras views.

As views no existem fisicamente, so


apenas uma forma de obter dados
localizados noutras tabelas ou views.

AERBP

Jorge Pina

61

VIEWS (3)

AERBP

Qualquer alterao nos dados de


uma tabela reflecte-se nos dados das
views a ela associadas.

No entanto as alteraes realizadas


na estrutura das tabelas como, por
exemplo, insero de colunas, no se
reflectem nas views j existentes.

Jorge Pina

62

31

07/10/2015

VIEWS (4)


A implementao de views tem na


sua gnese vrias razes:


Questes de segurana, evitando que


alguns campos ou registos estejam
acessveis a alguns tipos de utilizadores;

Questes
de
confidencialidade,
evitando que alguns utilizadores possam
consultar dados de acesso reservado;

Questes de simplicidade, condensando


numa nica view o acesso a vrias
tabelas.

AERBP

Jorge Pina

63

VIEWS (5)
CREATE [OR REPLACE] VIEW view [(campo1,
campo2, )]
AS comando SELECT
[WITH [CASCADE | LOCAL] CHECK OPTION]
Os parntesis rectos indicam que essa componente
facultativa.


Permite criar views.

CREATE VIEW pessoas1 AS SELECT * FROM


pessoas WHERE salario > 650

AERBP

Jorge Pina


64

Cria uma view com o valor de todos os campos


de todos os registos cujo salrio superior a 650
euros.

32

07/10/2015

VIEWS (6)


CREATE VIEW pessoas2 AS SELECT id, nome,


salario FROM pessoas WHERE salario > 650


AERBP

Cria uma view com o valor dos campos id,


nome e salario das pessoas cujo salrio
superior a 650 euros.

CREATE VIEW pessoas3 (num, nome,


ordenado) AS SELECT id, nome, salario
FROM pessoas WHERE salario > 650


Jorge Pina


65

Cria uma view com o valor dos campos id,


nome e salario de todas as pessoas cujo
salrio superior a 650 euros.
Os campos id, nome e salario aparecero
na listagem com nomes diferentes dos que
possuem na tabela original.

VIEWS (7)


CREATE VIEW pessoas4 AS SELECT * FROM


pessoas3 WHERE ordenado > 800



AERBP

SELECT * FROM pessoas3 WHERE ordenado >


800


Jorge Pina

Cria uma view, a partir de outra view, com o


valor dos campos num, nome e ordenado
de todos os registos cujo salrio superior a 800
euros.

Devolve o mesmo resultado do que a view


anterior.

66

33

07/10/2015

VIEWS (8)


As views no possuem dados prprios,


os seus dados pertencem s tabelas das
quais derivam.

Portanto qualquer alterao nos dados


(INSERT,
UPDATE,
DELETE)
ser
imediatamente reflectida em todas as
views que lhe esto associadas.

O inverso tambm verdadeiro, no que


diz respeito ao UPDATE, contudo s se
podero fazer operaes de INSET e
DELETE nas views, se estas estiverem
associadas a uma nica tabela.

AERBP

Jorge Pina

67

VIEWS (9)


Altere o salrio da Isabel Espada para 850


euros (alterao na tabela pessoas)
 UPDATE pessoas SET salario = 850 WHERE
nome LIKE %Isabel Espada%

Liste a informao da tabela pessoas


 SELECT * FROM pessoas

Liste a informao da view pessoas3


 SELECT * FROM pessoas3

Liste a informao da view pessoas4


 SELECT * FROM pessoas4

Conclui-se que a operao UPDATE foi efectuada


com sucesso.

AERBP

Jorge Pina

68

34

07/10/2015

VIEWS (10)


Altere o salrio da Isabel Espada para 875


euros (alterao na view pessoas3)
 UPDATE pessoas3 SET ordenado = 875
WHERE nome LIKE %Isabel Espada%

Liste a informao da view pessoas3


 SELECT * FROM pessoas3

Liste a informao da tabela pessoas


 SELECT * FROM pessoas

Liste a informao da view pessoas4


 SELECT * FROM pessoas4

Conclui-se que a operao UPDATE foi efectuada


com sucesso.

AERBP

Jorge Pina

69

VIEWS (11)


Uma view pode juntar vrias tabelas ou views.

CREATE VIEW moradas AS SELECT nome,


pessoas.cpostal, localidade FROM pessoas,
cpostais
WHERE
pessoas.cpostal
=
cpostais.cpostal


AERBP

Jorge Pina

CREATE VIEW salario_comissoes AS SELECT p1.id,


nome FROM pessoas1 p1, comissoes c WHERE
p1.id = c.id GROUP BY c.id HAVING COUNT(*) > 2


70

Cria uma view com os nomes, cdigos postais e


localidades de todas as pessoas.

Cria uma view com o id e o nome das pessoas cujo


salrio superior a 650 euros e tm mais de duas
comisses.

35

07/10/2015

VIEWS (12)

AERBP

Altere o nome da Isabel Espada para Isabel


Cruz
 UPDATE moradas SET nome = 'Isabel Cruz'
WHERE nome LIKE '%Isabel Espada%'

Liste a informao da tabela pessoas


 SELECT * FROM pessoas

Liste a informao da view moradas


 SELECT * FROM moradas

Conclui-se que a operao UPDATE foi efectuada


com sucesso mesmo tratando-se de uma view com
vrias tabelas .

Jorge Pina

71

VIEWS (13)


Acrescente
Moradas



AERBP

Jorge Pina

72

registo

seguinte

view

INSERT INTO moradas(nome, cpostal,


localidade) VALUES ('Maria Mendes', 4700,
Braga)

Elimine o registo seguinte da view Moradas




DELETE FROM moradas WHERE localidade


LIKE 'Caldas da Rainha'

Conclui-se que as operaes INSERT e DELETE


falharam porque se trata de uma view associada a
vrias tabelas .

36

07/10/2015

VIEWS (14)


A clusula [WITH [CASCADE | LOCAL] CHECK


OPTION] tem como objectivo verificar se as
alteraes a uma view obedecem s
condies impostas durante a criao da
mesma.

A opo LOCAL faz essa verificao apenas


na view na qual a opo foi definida.

A opo CASCADE faz a verificao em


todas as views utilizadas pela view onde a
opo foi definida.

Por omisso, a opo assumida CASCADE.

AERBP

Jorge Pina

73

VIEWS (15)


Considere novamente a view pessoas1


 CREATE VIEW pessoas1 AS SELECT * FROM
pessoas WHERE salario > 650

Acrescente-lhe o registo seguinte


 INSERT INTO pessoas1 VALUES (NULL,
'Maria Mendes', 50, 580, NULL, 4000)

Liste a informao da view pessoas1


 SELECT * FROM pessoas1

AERBP

Jorge Pina

74

37

07/10/2015

VIEWS (16)


Liste a informao da tabela pessoas


 SELECT * FROM pessoas

O registo foi inserido apesar de desrespeitar a


condio salario > 650 imposta aquando
da criao da view.

Esta situao ocorre sempre que na


definio da view no se utiliza a clusula
WITH CHECK OPTION.

AERBP

Jorge Pina

75

VIEWS (17)


Construa a view que se segue


 CREATE VIEW pessoas1_v2 AS SELECT *
FROM pessoas WHERE salario > 650 WITH
CHECK OPTION

Acrescente-lhe o registo seguinte


 INSERT INTO pessoas1_v2 VALUES (NULL,
Nuno Horcio, 41, 590, 262135791, 2500)

Liste a informao da view pessoas1


 SELECT * FROM pessoas1

AERBP

Jorge Pina

76

38

07/10/2015

VIEWS (18)


Liste a informao da tabela pessoas


 SELECT * FROM pessoas

O registo no foi inserido porque desrespeita


a condio salario > 650 imposta aquando
da criao da view.

Esta situao ocorre sempre que na


definio da view se utiliza a clusula WITH
CHECK OPTION.

AERBP

Jorge Pina

77

VIEWS (19)


SHOW CREATE VIEW nome_view





AERBP

Permite visualizar o cdigo associado


view.

DROP VIEW nome_view




Permite apagar uma view.

Jorge Pina

78

39

07/10/2015

ndices (1)


Para alm da chave primria outros


campos das tabelas podem ser
marcados como ndice de forma a
utilizar a indexao.

A indexao uma estrutura que


permite simular a ordenao dos
dados.

Consiste normalmente numa rvore


de termos que apontam para uma
determinada posio da tabela.

AERBP

Jorge Pina

79

ndices (2)


CREATE INDEX campo ON tabela




DROP INDEX campo ON tabela




AERBP

Associa a um campo da tabela a


caracterstica de ndice.

Retira a caracterstica de ndice a um


campo da tabela.

Jorge Pina

80

40

07/10/2015

Referncias Bibliogrficas


DAMAS, Lus. SQL. FCA Lisboa. 2005

PEREIRA, Jos Lus. Tecnologia de Bases de


Dados. FCA. Lisboa. 1998

Manual de Referncia do MySQL 4.1


reviso 242. 2010;

AERBP

Jorge Pina

81

41