Módulo 15

download Módulo 15

of 41

description

Apontamentos Modulo 15 PSI - Técnico Gestão e Programação de Sistemas Informáticos

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;