Apresentação realizada no Webinar com Módulo Security em 15-10-2013
Módulo 15
description
Transcript of Módulo 15
-
07/10/2015
1
2015/20162015/2016
3 TSI3 TSI
Jorge PinaJorge Pina
Mdulo 15Linguagem de Definio de Dados
Programao e Sistemas de Informao
AERBPAERBP
2
Jorge PinaJorge Pina
Definio
A linguagem SQL (StructuredQuery Language) umalinguagem declarativa.
Permite ao utilizador expressaraquilo que pretende sem ter queentrar em grandes detalhes sobrea localizao fsica dos compo-nentes.
-
07/10/2015
2
AERBPAERBP
3
Jorge PinaJorge Pina
Comandos
Existem quatro tipos de comandos SQL:
Os DML (Data Manipulation Language) quepermitem gerar consultas para filtrar eordenar dados da base de dados.
Os DDL (Data Definition Language) quepermitem criar e definir novas bases dedados, campos e ndices.
Os TCL (Transactional Control Language)que permitem o controlo de transaces.
Os DCL (Data Control Language) quepermitem o controlo de acesso aos dados.
AERBPAERBP
4
Jorge PinaJorge Pina
Comandos DML
COMANDO DESCRIO
SELECT
Consulta registos da base de
dados que satisfaam um
determinado critrio.
INSERT
Carrega conjuntos de dados na
base de dados numa nica
operao.
UPDATEModifica os valores dos campos e
registos especificados.
DELETEElimina registos de uma tabela de
uma base de dados.
-
07/10/2015
3
AERBPAERBP
5
Jorge PinaJorge Pina
Comandos DDL
COMANDO DESCRIO
CREATECria novas tabelas, campos e
ndices.
DROP Elimina tabelas e ndices.
ALTER
Utilizado para modificar as tabelas
agregando campos ou alterando
a definio dos campos
AERBPAERBP
6
Jorge PinaJorge Pina
Comandos TCL
COMANDO DESCRIO
COMMIT Permite efectivar transaces
ROLLBACK Permite anular transaces
Uma transaco um conjunto de operaes
-
07/10/2015
4
AERBPAERBP
7
Jorge PinaJorge Pina
Comandos DCL
COMANDO DESCRIO
GRANT
Permite conceder privilgios
aos utilizadores da base de
dados.
REVOKEPermite retirar privilgios aos
utilizadores da base de dados.
AERBPAERBP
8
Jorge PinaJorge Pina
Comando INSERT (1)
Considere as tabelas pessoas e cpostais:
pessoas
-
07/10/2015
5
AERBPAERBP
9
Jorge PinaJorge Pina
Comando INSERT (2)
Considere as tabelas pessoas e cpostais
(cont.):
cpostais
AERBPAERBP
10
Jorge PinaJorge Pina
Comando INSERT (3)
INSERT INTO tabela (campo1, campo2, )
VALUES (valor1, valor2, )
OU
INSERT INTO tabela
VALUES (valor1, valor2, )
Permite realizar a introduo de registos
numa tabela.
-
07/10/2015
6
AERBPAERBP
11
Jorge PinaJorge Pina
Comando INSERT (4)
INSERT INTO cpostais(cpostal, localidade)VALUES (1250, Mouraria)
INSERT INTO cpostais(localidade, cpostal)VALUES (Bairro Alto, 1250)
INSERT INTO cpostais VALUES (1270, BoaHora)
Insere registos na tabela cpostais com os
valores definidos (ex:1250 e Mouraria).
AERBPAERBP
12
Jorge PinaJorge Pina
Comando INSERT (5)
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, ArmindoTorres, 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.
-
07/10/2015
7
AERBPAERBP
13
Jorge PinaJorge Pina
Comando INSERT (6)
INSERT INTO tabela(campo1, campo2, )SELECT
INSERT INTO tabelaSELECT
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).
AERBPAERBP
14
Jorge PinaJorge Pina
Comando INSERT (7)
INSERT INTO jovens(id, nome, idade, salario,telefone, cpostal) SELECT * FROM pessoasWHERE idade
-
07/10/2015
8
AERBPAERBP
15
Jorge PinaJorge Pina
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 campocom ndice nico;
Inserir o valor NULL num campo NOT NULL;
Um dos campos obrigatrios ignorado;
O tipo de dados enviados na componente VALUES noest de acordo com o que foi definido em cada um doscampos;
O nmero de campos diferente dos valores associados;
Existe algum tipo de restrio no campo a que os dadosno obedecem.
AERBPAERBP
16
Jorge PinaJorge Pina
Comando UPDATE (1)
UPDATE tabela [alias]
SET campo1 = {expresso1, query1},
campo2 = {expresso2, query2},
[WHERE condio]
Os parntesis rectos indicam que essa componente
facultativa.
Permite alterar os valores j existentesnos campos de uma nica tabela.
-
07/10/2015
9
AERBPAERBP
17
Jorge PinaJorge Pina
Comando UPDATE (2)
UPDATE pessoas SET salario = salario * 1.1
Aumenta o salrio de todas as pessoas
em 10%.
UPDATE pessoas SET salario = salario * 1.1WHERE nome LIKE %Antnio Dias%
Aumenta o salrio do Antnio Dias em
10%.
UPDATE jovens SET salario = (SELECTMAX(salario) FROM pessoas) WHERE nomeLIKE %Clia Morais%
Aumenta o salrio da Clia Morais para
um valor igual ao maior salrio.
AERBPAERBP
18
Jorge PinaJorge Pina
Comando DELETE (1)
DELETE FROM tabela
[WHERE condio]
Os parntesis rectos indicam que essa componente
facultativa.
Permite apagar conjuntos de registosexistentes numa nica tabela.
-
07/10/2015
10
AERBPAERBP
19
Jorge PinaJorge Pina
Comando DELETE (2)
DELETE FROM pessoas WHERE nome
LIKE %Armindo Torres%
Apaga o registo cujo campo nome
Armindo Torres.
DELETE FROM pessoas WHERE id NOT IN
(SELECT DISTINCT id FROM comissoes)
Apaga os registos referentes a pessoas
que no tm qualquer comisso.
AERBPAERBP
20
Jorge PinaJorge Pina
Comandos DDL
COMANDO DESCRIO
CREATECria novas tabelas, campos e
ndices.
DROP Elimina tabelas e ndices.
ALTER
Utilizado para modificar as tabelas
agregando campos ou alterando
a definio dos campos
-
07/10/2015
11
AERBPAERBP
21
Jorge PinaJorge Pina
Comando CREATE TABLE (1)
CREATE TABLE tabela (
campo1, tipo,
campo2, tipo,
)
Permite criar uma tabela em modotexto.
AERBPAERBP
22
Jorge PinaJorge Pina
Comando CREATE TABLE (2)
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
-
07/10/2015
12
AERBPAERBP
23
Jorge PinaJorge Pina
Comando CREATE TABLE (3)
CREATE TABLE xcpostais (cpostal INT(4),localidade VARCHAR(30))
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:
Cada campo poder ter uma
ou vrias destas caractersticas
NOT NULL
DEFAULT
PRIMARY KEY
AUTO_INCREMENT
UNIQUE
FOREIGN KEY
CHECK
AERBPAERBP
24
Jorge PinaJorge Pina
Comando CREATE TABLE (4)
CREATE TABLE ycpostais (cpostal INT(4),
localidade VARCHAR(30) NOT NULL)
Nesta tabela o campo localidade no
pode ser NULL, ou seja, vazio.
CREATE TABLE zcpostais (cpostal INT(4),
localidade VARCHAR(30) DEFAULT
Lisboa)
Nesta tabela, se nenhum valor for definido
para o campo localidade, inserida a
palavra Lisboa
-
07/10/2015
13
AERBPAERBP
25
Jorge PinaJorge Pina
Comando CREATE TABLE (5)
CREATE TABLE wcpostais (cpostal INT(4)
PRIMARY KEY, localidade VARCHAR(30))
Nesta tabela o campo cpostal chave
primria, ou seja, no se pode repetir e
no pode ser nulo.
CREATE TABLE xcomissoes (id INT, id_msg
INT, valor DECIMAL(7,2), PRIMARY KEY(id,
id_msg))
Nesta tabela existe uma chave primria
composta, constituda pelos campos id e
id_msg.
AERBPAERBP
26
Jorge PinaJorge Pina
Comando CREATE TABLE (6)
CREATE TABLE xempregados (
id INT PRIMARY KEY AUTO_INCREMENT,nome VARCHAR(25),
apelido VARCHAR(25),
idade INT,
bi INT,
genero CHAR,
anos_servico INT
)
Nesta tabela, o campo id chave primria e
incrementado automaticamente sempre que se
insere mais um registo.
-
07/10/2015
14
AERBPAERBP
27
Jorge PinaJorge Pina
Comando CREATE TABLE (7)
CREATE TABLE yempregados (
id INT,
nome VARCHAR(25),
apelido VARCHAR(25),
idade INT,
bi INT UNIQUE,genero CHAR,
anos_servico INT,
UNIQUE(nome, apelido)
)
Nesta tabela, o campo bi no se pode repetir e
o conjunto constitudo pelos campos nome e
apelido tambm no.
AERBPAERBP
28
Jorge PinaJorge Pina
Comando CREATE TABLE (8)
A caracterstica FOREIGN KEY s funciona
com tabelas InnoDB.
Em MySQL, por omisso as tabelas so
MyISAM.
MyISAM vs InnoDB Nas consultas o MyISAM mais rpido;
Nas alteraes o InnoDB mais rpido;
O InnoDB suporta chaves estrangeiras e
transaces.
CREATE TABLE kcpostais (cpostal INT(4)
PRIMARY KEY, localidade VARCHAR(30))
ENGINE = InnoDB
-
07/10/2015
15
AERBPAERBP
29
Jorge PinaJorge Pina
Comando CREATE TABLE (9)
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 chaveestrangeira e est validada, ou seja, no se podem inserircdigos postais na tabela xpessoas que no existam natabela kcpostais.
Neste caso, est a admitir-se que o campo cpostal databela kcpostais chave primria.
AERBPAERBP
30
Jorge PinaJorge Pina
Comando CREATE TABLE (10)
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 kcpostaisfor alterado, essa alterao propagadaautomaticamente para a tabela ypessoas.
Se um registo da tabela kcpostais for apagado, seroapagados todos os registos correspondentes na tabelaypessoas.
-
07/10/2015
16
AERBPAERBP
31
Jorge PinaJorge Pina
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))
Nesta tabela o campo localidade no
pode ser NULL, ou seja, vazio e no pode
conter a palavra Faro.
AERBPAERBP
32
Jorge PinaJorge Pina
Comando CREATE TABLE (12)
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)
)
Nesta tabela, o campo idade no pode conter
um valor que seja inferior ao nmero de anos de
servio mais 18.
-
07/10/2015
17
AERBPAERBP
33
Jorge PinaJorge Pina
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.
AERBPAERBP
34
Jorge PinaJorge Pina
Comando ALTER TABLE (1)
Permite alterar a estrutura de umatabela.
ALTER TABLE tabela ADD campo, tipo
ALTER TABLE tabelaMODIFY campo, tipo
ALTER TABLE tabela DROP campo
ALTER TABLE tabela RENAME TO NovoNome
-
07/10/2015
18
AERBPAERBP
35
Jorge PinaJorge Pina
Comando ALTER TABLE (2)
ALTER TABLE xpessoas ADD fax VARCHAR(9)
Acrescenta tabela xpessoas o campofax .
ALTER TABLE xpessoas MODIFY fax
VARCHAR(14)
Modifica o campo fax de 9 para 14caracteres.
ALTER TABLE xpessoas DROP fax
Apaga o campo fax.
AERBPAERBP
36
Jorge PinaJorge Pina
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.
-
07/10/2015
19
AERBPAERBP
37
Jorge PinaJorge Pina
Comandos CREATE
e DROP DATABASE
CREATE DATABASE bd
Permite criar uma base de dados.
DROP DATABASE bd
Permite apagar uma base de dados.
Tanto na criao de bases de dados como detabelas, sempre que se tentar criar e o nome jexista, ocorrer um erro.
Para que o erro no ocorra, dever-se-acrescentar, sintaxe de criao, IF NOT EXISTS;
AERBPAERBP
38
Jorge PinaJorge Pina
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 NOTEXISTS;
CREATE DATABASE IF NOT EXISTS nomeBaseDados
CREATE TABLE IF NOT EXISTS nomeTabela(campos)
-
07/10/2015
20
AERBPAERBP
39
Jorge PinaJorge Pina
Comandos TCL
COMANDO DESCRIO
COMMIT Permite efectivar transaces
ROLLBACK Permite anular transaces
Uma transaco um conjunto de operaes
AERBPAERBP
40
Jorge PinaJorge Pina
ComandosCOMMIT e ROLLBACK (1) 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
-
07/10/2015
21
AERBPAERBP
41
Jorge PinaJorge Pina
ComandosCOMMIT 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).
AERBPAERBP
42
Jorge PinaJorge Pina
ComandosCOMMIT e ROLLBACK (3) Este exemplo leva-nos ao conceito de
transaco.
Transaco - consiste numa unidade lgicade 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 ambasas instrues UPDATE ou no executadanenhuma.
A operao de transferncia de dinheiro
consiste ento numa transaco.
-
07/10/2015
22
AERBPAERBP
43
Jorge PinaJorge Pina
ComandosCOMMIT e ROLLBACK (4) Todas as transaces comeam com a
instruo START TRANSACTION e terminamcom a instruo COMMIT ou ROLLBACK.
COMMIT converte em definitivas todas asalteraes realizadas desde o incio da
transaco.
ROLLBACK elimina as alteraes realizadasdesde o incio da transaco ficando a base
de dados inalterada.
O conceito de transaco s se aplica aos
comandos que fazem a manipulao de
dados, isto , INSERT, UPDATE e DELETE.
AERBPAERBP
44
Jorge PinaJorge Pina
ComandosCOMMIT e ROLLBACK (5)
Nos Sistemas de Gesto de Bases deDados (SGBD) actuais, as tabelas do tipoInnoDB so sempre processadas dentro docontexto de transaces.
Mesmo que a operao seja constitudapor apenas uma instruo esta serexecutada dentro de uma transaco.
A maior parte das transaces soportanto iniciadas automaticamenteporque uma transaco comea quandooutra termina.
-
07/10/2015
23
AERBPAERBP
45
Jorge PinaJorge Pina
ComandosCOMMIT 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 utiliza-
se a instruo seguinte:
SET autocommit = 0
AERBPAERBP
46
Jorge PinaJorge Pina
ComandosCOMMIT e ROLLBACK (7)
START TRANSACTION;INSERT INTO kcpostais VALUES (3800, Aveiro)
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
-
07/10/2015
24
AERBPAERBP
47
Jorge PinaJorge Pina
Comandos DCL
COMANDO DESCRIO
GRANT
Permite conceder privilgios
aos utilizadores da base de
dados.
REVOKEPermite retirar privilgios aos
utilizadores da base de dados.
AERBPAERBP
48
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (1)
Os Sistemas de Gesto de Bases deDados (SGBD) actuais tmmecanismos que permitem garantir asegurana dos dados armazenados.
Uma das formas de fazer esse controlo determinar quem pode aceder base de dados e uma vez l dentroquais as instrues que podeexecutar.
-
07/10/2015
25
AERBPAERBP
49
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (2)
Para os exemplos destes comandos,ire-se- utilizar a consola MySQL dalinha de comandos;
Para o efeito, no painel de controlodo xampp, no Menu do lado direito,clica-se no boto shell
AERBPAERBP
50
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (3)
Aps ter entrado na consola da linhade comandos, digite cd mysql\bin;
Aps estar posicionado no diretoriocorreto, digite mysql -u -p;
Por defeito, o utilizador ativo ser o utilizador root, que
embora tenha privilgios de administrador, apresenta-
se sem password de acesso, pelo que, por questes
de segurana, ser aconselhado que se adicione
uma.
set password for root@localhost = password(password);
-
07/10/2015
26
AERBPAERBP
51
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (4) O administrador root, no s, temacesso a todas as bases de dados,como pode manipular todos os seusdados ou, inclusive, criar e concederprivilgios a outros utilizadores.
AERBPAERBP
52
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (4) Para se retirar ou alterar a Password,digita-se:
UPDATE mysql.user SET Password = PASSWORD ( ou New_PassWord)
WHERE User=root;
FLUSH PRIVILEGES;
-
07/10/2015
27
AERBPAERBP
53
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (5) Criar um utilizador com acesso de localhost
CREATE USER xpto@localhost IDENTIFIED BY
123456
Criar um utilizador com acesso de qualquer
host
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
AERBPAERBP
54
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (6) 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
-
07/10/2015
28
AERBPAERBP
55
Jorge PinaJorge Pina
ComandosGRANT 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
GRANT ALL ON bd1.* TO xpto@%
Conceder privilgios para tudo mas apenas
na tabela tabela1 da base de dados
bd1, para o utilizador xpto, a partir de
qualquer host
GRANT ALL ON bd1.tabela1 TO xpto@%
AERBPAERBP
56
Jorge PinaJorge Pina
ComandosGRANT 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
GRANT SELECT ON *.* TO xpto@%
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
GRANT SELECT(campo1) ON bd1.tabela1 TO
xpto@%
-
07/10/2015
29
AERBPAERBP
57
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (9) Mostrar os privilgios do utilizador actual
SHOW GRANTS;
Mostrar os privilgios do utilizador xpto
SHOW GRANTS FOR xpto@%
Retirar todos os previlgios ao 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
REVOKE SELECT ON bd1.* FROM xpto@%
AERBPAERBP
58
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (10) Os previlgios tm que ser retirados numa
proporo igual ou maior do que aquela
com que foram concedidos:
A instruo
GRANT SELECT ON *.* TO xpto@%
Implica a utilizao da instruo
REVOKE SELECT ON *.* FROM xpto@%
Ou da instruo
REVOKE ALL PRIVILEGES, GRANT OPTION FROM
xpto@%
Em vez da instruo
REVOKE SELECT ON bd1.* FROM xpto@%
-
07/10/2015
30
AERBPAERBP
59
Jorge PinaJorge Pina
ComandosGRANT e REVOKE (11) Alterar a password do utilizador xpto
SET PASSWORD FOR xpto = PASSWORD(P45sword)
Eliminar um utilizador
DROP USER xpto
AERBPAERBP
60
Jorge PinaJorge Pina
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.
-
07/10/2015
31
AERBPAERBP
61
Jorge PinaJorge Pina
VIEWS (2)
As views resolvem a necessidade dediferentes utilizadores verem a mesmatabela ou tabelas de formas distintas.
Uma view consiste num comandoselect realizado sobre uma ou vriastabelas ou ainda sobre outras views.
As views no existem fisicamente, soapenas uma forma de obter dadoslocalizados noutras tabelas ou views.
AERBPAERBP
62
Jorge PinaJorge Pina
VIEWS (3)
Qualquer alterao nos dados deuma tabela reflecte-se nos dados dasviews a ela associadas.
No entanto as alteraes realizadasna estrutura das tabelas como, porexemplo, insero de colunas, no sereflectem nas views j existentes.
-
07/10/2015
32
AERBPAERBP
63
Jorge PinaJorge Pina
VIEWS (4)
A implementao de views tem nasua 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.
AERBPAERBP
64
Jorge PinaJorge Pina
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 * FROMpessoas WHERE salario > 650
Cria uma view com o valor de todos os campos
de todos os registos cujo salrio superior a 650
euros.
-
07/10/2015
33
AERBPAERBP
65
Jorge PinaJorge Pina
VIEWS (6)
CREATE VIEW pessoas2 AS SELECT id, nome,salario FROM pessoas WHERE salario > 650
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, salarioFROM pessoas WHERE salario > 650
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.
AERBPAERBP
66
Jorge PinaJorge Pina
VIEWS (7)
CREATE VIEW pessoas4 AS SELECT * FROMpessoas3 WHERE ordenado > 800
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.
SELECT * FROM pessoas3 WHERE ordenado >800
Devolve o mesmo resultado do que a view
anterior.
-
07/10/2015
34
AERBPAERBP
67
Jorge PinaJorge Pina
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.
AERBPAERBP
68
Jorge PinaJorge Pina
VIEWS (9)
Altere o salrio da Isabel Espada para 850
euros (alterao na tabela pessoas)
UPDATE pessoas SET salario = 850 WHEREnome 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.
-
07/10/2015
35
AERBPAERBP
69
Jorge PinaJorge Pina
VIEWS (10)
Altere o salrio da Isabel Espada para 875
euros (alterao na view pessoas3)
UPDATE pessoas3 SET ordenado = 875WHERE 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.
AERBPAERBP
70
Jorge PinaJorge Pina
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
Cria uma view com os nomes, cdigos postais e
localidades de todas as pessoas.
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
Cria uma view com o id e o nome das pessoas cujo
salrio superior a 650 euros e tm mais de duas
comisses.
-
07/10/2015
36
AERBPAERBP
71
Jorge PinaJorge Pina
VIEWS (12)
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 .
AERBPAERBP
72
Jorge PinaJorge Pina
VIEWS (13)
Acrescente o registo seguinte view
Moradas
INSERT INTO moradas(nome, cpostal,localidade) VALUES ('Maria Mendes', 4700,Braga)
Elimine o registo seguinte da view Moradas
DELETE FROM moradas WHERE localidadeLIKE 'Caldas da Rainha'
Conclui-se que as operaes INSERT e DELETE
falharam porque se trata de uma view associada a
vrias tabelas .
-
07/10/2015
37
AERBPAERBP
73
Jorge PinaJorge Pina
VIEWS (14)
A clusula [WITH [CASCADE | LOCAL] CHECKOPTION] tem como objectivo verificar se asalteraes 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.
AERBPAERBP
74
Jorge PinaJorge Pina
VIEWS (15)
Considere novamente a view pessoas1
CREATE VIEW pessoas1 AS SELECT * FROMpessoas 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
-
07/10/2015
38
AERBPAERBP
75
Jorge PinaJorge Pina
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.
AERBPAERBP
76
Jorge PinaJorge Pina
VIEWS (17)
Construa a view que se segue
CREATE VIEW pessoas1_v2 AS SELECT *FROM pessoas WHERE salario > 650 WITHCHECK 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
-
07/10/2015
39
AERBPAERBP
77
Jorge PinaJorge Pina
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.
AERBPAERBP
78
Jorge PinaJorge Pina
VIEWS (19)
SHOW CREATE VIEW nome_view
Permite visualizar o cdigo associado
view.
DROP VIEW nome_view
Permite apagar uma view.
-
07/10/2015
40
AERBPAERBP
79
Jorge PinaJorge Pina
ndices (1)
Para alm da chave primria outroscampos das tabelas podem sermarcados como ndice de forma autilizar a indexao.
A indexao uma estrutura quepermite simular a ordenao dosdados.
Consiste normalmente numa rvorede termos que apontam para umadeterminada posio da tabela.
AERBPAERBP
80
Jorge PinaJorge Pina
ndices (2)
CREATE INDEX campo ON tabela
Associa a um campo da tabela a
caracterstica de ndice.
DROP INDEX campo ON tabela
Retira a caracterstica de ndice a um
campo da tabela.
-
07/10/2015
41
AERBPAERBP
81
Jorge PinaJorge Pina
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;