bases de dados - te orico/pr aticaspedro/lectivos/basesdados/apontamentosprati... · mysql |...

59
Bases de Dados - Te´ orico/Pr´ aticas (2018/10/29 (v595)) Pedro Quaresma Departamento de Matem´ atica Universidade de Coimbra 2018/2019 Pedro Quaresma (Matem´ atica, FCTUC) Bases de Dados (2018/10/29 (v595)) 2018/2019 1 / 55

Upload: dangkien

Post on 13-Dec-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados - Teorico/Praticas(2018/10/29 (v595))

Pedro Quaresma

Departamento de MatematicaUniversidade de Coimbra

2018/2019

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2018/10/29 (v595)) 2018/2019 1 / 55

Page 2: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

MySQL — Instalacao

Linux — LAMPI mysql-server — serverI mysql-client — command-line clientI mysql-workbench — GUI clientI php-mysql — MySQL module for PHP (≥ 7.0)I + dependencias (Apache2, PHP, . . . )

MS-Windows — WAMPI http://www.easyphp.org/ — EasyPHP

OU (exclusivo)I http://www.wampserver.com/en/ — WampServer

Para as todas as plataformas — MySQLI http://dev.mysql.com/downloads/I MySQL Community ServerI MySQL WorkbenchI MySQL Utilities

https://en.wikipedia.org/wiki/List_of_Apache-MySQL-PHP_packages

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 2 / 55

Page 3: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

MySQL — Servidor/Grupos de TrabalhoCada grupo tem uma conta em �rena4.mat.uc.pt�, bdN, e tempermissoes para criar bases de dados cujos nomes tem de(obrigatoriamente) ter como prefixo o nome do grupo bdN....

/home/users% mysql -u bd01 -p -h rena4.mat.uc.pt

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 5337

Server version: 5.0.45 SUSE MySQL RPM

Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.

mysql>

show databases;

+-----------+

| Database |

+-----------+

| bd01Proj1 |

+-----------+

1 row in set (0.00 sec)

mysql>

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 3 / 55

Page 4: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

MySQL — Meta-comandosmysql — interpretador de linha de comando ($ man mysql)

$ mysql -p -u <nome utilizador> -h <nome de servidor>

a opcao -p e de �password�.

use/connect <nome bd> — estabelece a ligacao a uma base de dados.

show databases/tables — mostra as bases de dados/tabelas disponıveis.

describe <nome tabela> — mostra a estrutura interna de uma tabela.

source <nome de ficheiro> — carrega um ficheiro e (tenta) executa oscomandos SQL nele contidos.

quit — sai do interpretador.

Um comando util e o comando mysqldump o qual permite fazer copias deseguranca das bases de dados, por exemplo:

$ mysqldump -p --databases bd01projecto1 > bd01Projecto1.sql

cria o ficheiro �bd01Projecto1.sql� no qual estao todos os comandos SQLnecessarios para (re)criar a base de dados �bd01Projecto1�.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 4 / 55

Page 5: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Linguagem de Definicao de Dados (DDL)

Linguagem de Definicao de Dados (DDL) — Linguagem para especificar ainformacao acerca de cada relacao, incluindo:

O esquema de cada relacao.

O domınio de valores associados com cada atributo.

Restricoes de integridade

O conjunto de ındices a manter para cada relacao.

Informacao de seguranca e autorizacao para cada relacao.

As estruturas de armazenamento fısico em disco de cada relacao.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 5 / 55

Page 6: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Criacao de Bases Dados/Tabelas (Relacoes)

Instrucao CREATE DATABASE <nome da bd>, cria uma base dedados com o nome escolhido.

Instrucao:CREATE TABLE <nome da tabela> (

<campo 1 tipo 1>,...,

<campo n tipo n>)cria a tabela (relacao).

Exemplo:

CREATE TABLE Branch( branchName char ( 1 5 ) NOT NULL,b r a n c h C i t y char ( 3 0 ) ,a s s e t s i n t e g e r )

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 6 / 55

Page 7: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Tipos em SQL

char(n). Cadeia de caracteres de comprimento fixo n.

varchar(n). Cadeia de caracteres de comprimento variavel, com omaximo n especificado pelo utilizador.

int. inteiro (um subconjunto finito dos inteiros, dependente damaquina).

smallint. Inteiro pequeno (um subconjunto do tipo int).

numeric(p,d). Numero de vırgula fixa, com precisao de p dıgitos ecom n casas decimais.

real, double precision. Numeros de vırgula flutuante, comprecisao dependente da maquina.

float(n). Numero de vırgula flutuante, com um mınimo de precisaode n dıgitos.

Os valores nulos sao permitidos em todos os tipos de dados. Adeclaracao de um atributo como not null proıbe os valores nulospara esse atributo.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 7 / 55

Page 8: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Tipos em SQL

date. datas, contendo um ano com (4 dıgitos), mes e diaI E.g. date 2001-7-27

time. Tempo (diario), em horas, minutos e segundos.I E.g. time 09:00:30 time 09:00:30.75

timestamp: data mais horaI E.g. timestamp 2001-7-27 09:00:30.75

Interval: perıodo de tempoI E.g. Interval 1 dayI A subtraccao de dois valores de date/time/timestamp devolve um

intervaloI Os valores de intervalos podem ser adicionados a valores de

date/time/timestamp

Pode-se extrair campos do valor date/time/timestampI E.g. extract (year from SYSDATE)

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 8 / 55

Page 9: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Alteracao de Tabelas (Relacoes)

Instrucao ALTER TABLE — a instrucao alter table e utilizada paramodificar o esquema, ou as restricoes sobre relacoes ja existente.

Para adicionar novos atributos:

ALTER TABLE r ADD A D

Todos os tuplos existentes ficam com null no novo atributo.

Para eliminar um atributo:

ALTER TABLE r DROP A

em que A e o nome de um atributo na relacao r.

Para modificar um atributo:

ALTER TABLE r MODIFY A D

em que A e o nome do atributo a adicionar a relacao r e D o domınio de A.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 9 / 55

Page 10: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Destruicao de Bases Dados/Tabelas (Relacoes)

Instrucao DROP DATABASE <nome da bd>, apaga a base de dadoscom o nome escolhido.

Instrucao DROP TABLE <nome da tabela>, apaga a tabela com onome escolhido (da base de dados corrente).

A especificacao completa destes comandos em MySQL pode ser obtida nomanual de referencia on-line (http://dev.mysql.com/doc/).

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2017/12/17 (v397)) 2018/2019 10 / 55

Page 11: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados e Paginas da Rede — Porque?

Bases de Dados Informacao:

Banca: todas as transaccoes e movimentos;Companhias aereas: reservas, horarios;Universidades: inscricoes, notas;Vendas: clientes, produtos, compras;Sistema de gestao de artigos numa conferencia/revista;lojas �on-line�;...

Paginas da Rede Disseminacao de Informacao:

Acesso Global (geografico);Acesso Generalizado:

I rede — larga cobertura a nıvel mundial;I navegadores — total.

Interface uniforme e facil de usar/programar.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 11 / 55

Page 12: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados e Paginas da Rede — Como?

Linguagem de Programacao

Ligacao a base de dados:I −→ SQL;I ←− estruturas de dados de transferencia.

Ligacao a Pagina de Rede:I −→ escrita de ficheiros HTML;I ←− formularios HTML + estruturas de dados de

transferencia.

entre outras aproximacoes possıveis.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 12 / 55

Page 13: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados e Paginas da Rede — Como?

Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).

HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.

PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.

MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).

Solucao possıvel em: Linux; MacOS; MS-Windows; . . .

Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55

Page 14: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados e Paginas da Rede — Como?

Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).

HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.

PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.

MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).

Solucao possıvel em: Linux; MacOS; MS-Windows; . . .

Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55

Page 15: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados e Paginas da Rede — Como?

Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).

HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.

PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.

MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).

Solucao possıvel em: Linux; MacOS; MS-Windows; . . .

Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55

Page 16: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados e Paginas da Rede — Como?

Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).

HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.

PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.

MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).

Solucao possıvel em: Linux; MacOS; MS-Windows; . . .

Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55

Page 17: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Bases de Dados e Paginas da Rede — Como?

Apache servidor de paginas capaz de processar o HTML e o PHP(entre outras).

HTML (Hypertext Meta-Language) linguagem para a construcao depaginas da rede.

PHP linguagem de programacao generica embutida em ficheirosHTML e capaz de comunicar com SGBDs.

MySQL um SGBD capaz de comunicar com varias linguagens deprogramacao (PHP, . . . ).

Solucao possıvel em: Linux; MacOS; MS-Windows; . . .

Solucao servidor, isto e, nao necessita de nenhuma funcionalidadeespecial nos navegadores dos �clientes�.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 13 / 55

Page 18: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Apache

O programa Apache e o servidor de paginas �Web�.

Responde aos pedidos dos clientes.

Trata das questoes de seguranca inerentes a um servico �publico�.

Tem como clientes os Navegadores com os quais comunica.

Interpreta (se configurado para tal) a linguagem PHP, assim comooutras linguagens �externas�.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 14 / 55

Page 19: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Apache — Convencoes

Num sistema Linux/Unix cada utilizador pode criar uma pagina. Poromissao o directorio a usar deve-se designar por public html:

I ~nomeUtilizador/public html/index.html ← Sistema de ficheirosUnix.

I http://nomeDoDominio/~nomeUtilizador/index.html ← URL

Por omissao o ficheiro inicial designa-se por index.html

I ~nomeUtilizador/public html/index.html ← Sistema de ficheirosUnix.

I http://nomeDoDominio/~nomeUtilizador/ ← URL

Para que num ficheiro contendo codigo PHP este seja interpretado deforma correcta, a extensao do ficheiro tem de ser php.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 15 / 55

Page 20: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML — HyperText Markup Language

Uma coleccao de �meta-marcas� (�markup tags�) usadas para definir asvarias componentes de um texto da rede.

�HTML5 Tutorial� — http://www.w3schools.com/html/

�Getting started with HTML� Dave Raggett (2005) —https://www.w3.org/MarkUp/Guide/

Formularios I —https://www.w3.org/TR/html401/interact/forms.html

Formularios II —http://www.mat.uc.pt/~pedro/manuais/overview.html.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 16 / 55

Page 21: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, (muito) Breve Introducao

O HTML (HyperText Markup Language) e uma meta-linguagem comcapacidade de referenciacao. Isto e, e uma linguagem que descreve umaoutra linguagem (a linguagem dos textos da rede) e que e capaz de incluir,num dado texto, referencias a outros textos.

Cabecalho (�head�) - contem dados gerais sobre o texto que sesegue.

Corpo (�body�) - contem a descricao do texto atraves de uma seriede comandos que lidam com as varias estruturas de um texto.

I O espacamento entre palavras e definido de forma dinamica. Umespaco no texto fonte, vale tanto como vinte espacos, o resultado finale o mesmo.

I Nao tem a nocao de linha, ou melhor de quebra de linha. As linhaspodem ter uma largura variavel.

I Nao tem a nocao de pagina de texto. O comprimento dos textos e, emteoria, infinito.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 17 / 55

Page 22: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML — Um exemplo

<html><head><TITLE>Um exemplo s i m p l e s de um t e x t o em HTML</TITLE>

</ head>

<body><H1>HTML &e a c u t e ; s i m p l e s de Aprender</H1>

<P>Exemplo de um par&a a c u t e ; g r a f o em HTML.Como podem v e r tem a marca ” tag ” , ”P” !

</P>

<P>Todos ( quase t o d o s ) os comandos HTML tem uma marca i n i c i a l euma marca f i n a l , sendo que e s s a s&o a c u t e ; d i f e r e da i n i c i a lp e l o p r e f i x o ”/” .

</P>

</ body></ html>

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 18 / 55

Page 23: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, (muito) Breve Introducao

Como numa linguagem de programacao �normal� o uso daindentacao e opcional.

A utilizacao de editores especializados permite �esquecer� ospormenores da linguagem (nao podem ser usados processadores detexto).Geany, Emacs, ....

O HTML e uma linguagem sem a nocao de estado (�stateless�), istoe nao permite, entre outras, a comunicacao entre textos atraves deparametros.

A comunicacao entre texto e feita atraves do mecanismos deformularios

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 19 / 55

Page 24: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Marcas

HTML Marca o inıcio (e o fim) do texto HTML. Informa onavegador que o texto contem codigo HTML (a extensao.html tem o mesmo efeito).

HEAD Define o cabecalho - informacao generica sobre o documento.

TITLE Contem o tıtulo �exterior� do documento, isto e identifica otexto no contexto global (e uma das informacoes que o�google� procura).

BODY Define o corpo do documento, isto e, o documento que vaiser visıvel atraves do navegador. E aqui que se pode definir otexto atraves de um conjunto de marcas para as variasestruturas em que um texto e constituıdo.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 20 / 55

Page 25: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Marcas (continuacao)

Headings Cabecalhos, o HTML tem seis nıveis de cabecalhos: <Hx>,com x = 1, 2, . . . , 6.

Paragrafos Dado que o HTML nao tem a nocao de linha (nem deespacamento fixo), sempre que se quer comecar um novoparagrafo e necessario usar a marca <P>.

Listas O HTML suporta: listas nao ordenadas (numeradas); listasordenadas; e listas de definicoes.

Listas Nao Ordenadas: Marca de inıcio/fim de lista nao ordenada<UL>; marca de inıcio/fim de um elemento (�item�) da lista <LI>.

Listas Ordenadas: Marca de inıcio/fim de lista ordenada <OL>;marca de inıcio/fim de um elemento (�item�) da lista <LI>.

Listas de Definicoes: Marca de inıcio/fim de lista de definicoes<DL>; marca de inıcio/fim do tıtulo para o elemento a definir <DT>;marca de inıcio/fim da definicao <DD>;

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 21 / 55

Page 26: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Marcas: Tabelas

A marca <TABLE> delimita o espaco de construcao de uma tabela, isto e,um texto formatado em linhas, em que cada linha esta dividida emcolunas. Dentro desse espaco temos acesso as seguintes marcas:

Linhas cada linha da tabela e definida atraves da marca <TR>.

Cabecalhos (das colunas) podemos definir uma linha de cabecalhos (emgeral a linha de topo) usando a marca <TH>, uma por coluna.

Colunas dentro de cada linha podemos definir as colunas atraves damarca <TD>.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 22 / 55

Page 27: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Marcas (continuacao)

Texto pre-formatado <PRE> seccao de texto em que os espacos e asmudancas de linha sao significativas e em que o tipo de letrausado e de largura fixa. Optimo para incorporar descricoes deprogramas escritos numa dada linguagem de programacao.

Mudancas de linha pode-se forcar a mudanca de linha utilizando a marca<BR/>. Note-se que neste caso nao se esta perante um parde marcas, so existe a marca descrita.

Linhas Horizontais pode-se introduzir uma linha horizontal (a separar duasseccoes de texto), atraves da marca <HR/>. Esta e tambemuma marca isolada.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 23 / 55

Page 28: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Atributos

(± desactualizado, ver estilos em HTML5)Muitas das marcas no HTML podem ter a sua accao modificada atravesda utilizacao de atributos.

Por exemplo:

<P ALIGN="center"> permite definir um paragrafo centrado.

<TABLE border="1">, define uma tabela com uma bordadura detipo 1 (espessura mınima).

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 24 / 55

Page 29: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Formularios

Sendo que o HTML e uma linguagem sem a nocao de estado. . . como eque e possıvel comunicar entre paginas, e entre uma pagina e umprograma?

A resposta e dada pelas �Forms�.

<FORM ACTION="url" METHOD="POST"> ... </FORM>

Os formularios em HTML podem ser de dois tipos (Method=...):

GET os dados sao passados atraves do URL.

POST os dados sao passados atraves da construcao de uma paginapropria para o efeito.

Temos entao a marca <Form> a marcar o inıcio/fim de um formulario.Neste caso a especificacao dos atributos e essencial.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 25 / 55

Page 30: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Formularios

Atributos da marca �Form�

ACTION define o �URL� do programa que e suposto processar ainformacao recolhida pelo formulario.

METHOD �GET�, ou �POST�, define a forma como os valores saopassados.Qual dos metodos a utilizar vai depender da aplicacaopretendida, em geral o primeiro reserva-se para quando aquantidade de informacao a passar e pequena e/ou publica,ficando o outro metodo reservado para os outros casos.

No ambito dos formularios temos acesso as seguintes marcas:

INPUT um elemento simples (uma so linha de texto).

SELECT a escolha de um elemento entre varias opcoes.

TEXTAREA um elemento multi-linhas.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 26 / 55

Page 31: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Formularios, INPUT

< i n p u t type =’ text ’ name=’nomeVar ’ s i z e = ’80 ’ maxlength = ’80 ’>

Os atributos desta marca sao:

TYPE text; password; checkbox; radio; submit; reset.

NAME define (a exemplo de uma variavel) um identificador para oelemento que se esta a especificar.

VALUE pode ser usado para se definir o valor do elemento.

CHECKED especifica se um elemento do tipo checkbox ou radio estaactivado, por omissao.

SIZE tamanho fısico (em caracteres) do campo de entrada talcomo ele vai ser formatado.

MAXLENGTH tamanho maximo (em caracteres) do elemento de entrada.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 27 / 55

Page 32: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Formularios, SELECT

<SELECT NAME="lista-de-opc~oes">

<OPTION> Primeira opc~ao</OPTION>

...

<OPTION> opc~ao N</OPTION>

</SELECT>

Os atributos desta marca sao:

NAME define (a exemplo de uma variavel) um identificador para oelemento que se esta a especificar.

SIZE numero de elementos visıveis da lista de opcoes, para umadada posicao da barra de corrimento.

MULTIPLE se presente pode-se escolher varios elementos

Os atributos da marca �OPTION� sao:

SELECTED especifica que a opcao em causa e seleccionada por omissao.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 28 / 55

Page 33: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML, Formularios, TEXTAREA

<TEXTAREA NAME = ”nomeVar” ROWS=4 COLS=40>E s t e &e a c u t e ; o c o n t e&u a c u t e ; do por omiss&a t i l d e ; o

</TEXTAREA>

Os atributos desta marca sao:

NAME define (a exemplo de uma variavel) um identificador para oelemento que se esta a especificar.

ROWS o numero de linhas da janela de entrada.

COLS o numero de colunas (caracteres) da janela de entrada.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 29 / 55

Page 34: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP — Bibliografia

Manual do PHP (�on-line�)http://php.net/manual/pt_BR/index.php

Luke Welling & Laura Thomson, PHP and MySQL Web Development(Developer’s Library), 5th Edition, Addison-Wesley Professional,2016. ISBN-13: 978-0321833891 (new PHP 7 coverage)

. . . PHP (≥ 7.0)

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 30 / 55

Page 35: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP

Linguagem de programacao generica embutida em ficheiros HTML.

Um ficheiro de extensao php pode conter: HTML; marcas PHP;codigo PHP (entre um par de marcas PHP);

O Apache (ou outro programa que faca a gestao do servico) tem deestar configurado para interpretar o codigo PHP.

Os ficheiros que contem codigo PHP tem de ter a extensao php

Um exemplo de programa (exemplo.php).

<?phpecho ”<p>Ol&a a c u t e ; mundo</p>” ;

?>

O PHP e uma das mais populares linguagens para construcao de paginasdinamicas numa perspectiva de uma solucao servidor (todo oprocessamento e feito no servidor).O PHP providencia uma muito facil ligacao a bases de dados.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 31 / 55

Page 36: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP — Introducao

A sintaxe, do PHP e semelhante a linguagem C (assim como aspotencialidades).

VariaveisI sem declaracao explıcita, uma dada instrucao de atribuicao cria a

variavel, de um dado tipo, com um dado valor;I o valor, assim como o tipo de uma variavel pode ser mudado por uma

outra atribuicao posterior.I identificam-se pelo caracter $ inicial, por exemplo: $nome

TiposI Inteiros;I Reais;I Sequencias de caracteres;I Booleanas;I Tabelas;

A linguagem e �case sensitive�, ou seja maiusculas e minusculas saoconsideradas diferentes.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 32 / 55

Page 37: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP — Ambito das Variaveis

O PHP nao tem mecanismos (explıcitos) de comunicacao entre ficheiros,como tal o ambito de uma variavel esta sempre ligado ao ficheiro aonde foidefinida.

Entre ficheiros (sessoes Apache):

Variaveis Super Globais – sempre visıveis.

Num dado ficheiro:

Constantes – sempre visıveis.

Variaveis Globais – em todo o ficheiro excepto dentro das funcoes.

Variaveis declaradas dentro de uma funcao como estaticas, referem-seas variaveis com o mesmo nome, mas mantem o valor entrechamadas sucessivas.

Variaveis declaradas dentro de uma funcao sao locais a essa funcao.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 33 / 55

Page 38: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP

Algumas variaveis Super Globais

$ SERVER - tabela contendo as variaveis de ambiente do servidor;

$ SESSION - tabela contendo as variaveis de sessao;

$ GET - tabela contendo as variaveis de um formulario HTML emmodo �get�;

$ POST - tabela contendo as variaveis de um formulario HTML emmodo �post�;

Os operadores sao os usuais da linguagem C

As precedencia dos operadores sao tambem as usuais;

Os comentarios sao tambem os usuais.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 34 / 55

Page 39: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP — Estruturas de Controlo

Estruturas de Controlo

composicao sequencial;

atribuicao.

condicionais:I ifI if elseI elseifI switch

Ciclos:I whileI forI for eachI do ...while

Funcoes.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 35 / 55

Page 40: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP — Programacao ModularProgramacao modular - O PHP tem uma dupla personalidade:programacao imperativa classica; programacao orientada aos objectos.Nestas breves notas vou tratar so da primeira aproximacao.

Funcoes a sintaxe e semantica da declaracao de funcoes e similar a dalinguagem C;

function nome da funcao($arg1,$arg2,...,$argN);

Comunicacao entre funcoes a chamada de uma funcao e tambem identicaa da linguagem C;

nome da funcao(val1,val2,...,valN);

Alem dos argumentos a comunicacao pode tambem ser feitaatraves da utilizacao de variaveis globais.

Comunicacao entre modulos por modulos entenda-se ficheiros. Esta e facilde responder: nao e possıvel (a menos das variaveissuper-globais).

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 36 / 55

Page 41: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP — Comunicacao Entre Ficheiros

Comunicacao entre ficheiros: como foi dito anteriormente nao hamecanismos de comunicacao entre ficheiros, isto dado que o protocoloHTML nao tem a nocao de estado.Solucoes?

Formularios (POST ou GET).

Sessoes (com as respectivas variaveis de sessao).

Ficheiros auxiliares: e possıvel ler e escrever ficheiros

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 37 / 55

Page 42: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP & HTML

A entradas e saıdas na linguagem PHP sao sempre feitas atraves dalinguagem HTML:

Saıdas Os comandos usuais de visualizacao de uma linguagem deprogramacao estao presentes no PHP (sintaxe similar ao C),no entanto elas tem de ser pensadas como tendo um passointermedio que e o HTML

PHP

HTML

<p>Olá Mundo</p>

Olá Mundo

ecrã (Navegador)

C

ecrã

Olá Mundo

printf(’Olá Mundo’); printf(’<p>Olá Mundo</p>’);

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 38 / 55

Page 43: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP & HTML

Entradas a leitura de valores e feita somente atraves dos formulariosHTML

especificacao do ficheiro PHP que vai processar osdados do formulario (no formulario HTML):

<form action=’processa.php’ method=’post’>

Especificacao dos nomes dos campos que vao receber osvalores do formulario (no formulario HTML):

<input type=’text’ name=’nomedocampo’>

a �leitura� dos valores no PHP e feita atraves da matrizassociativa $ POST (ou $ GET) (no ficheiro PHP):

$nomeVariavel = $ POST[’nomedocampo’];

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 39 / 55

Page 44: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

MySQL

Referencias — MySQL, paginas oficiais.

http://www.mysql.com/ — Pagina geral

http://dev.mysql.com/doc/ — �MySQL Documentation�

http://dev.mysql.com/doc/refman/5.7/en/ — Manual deReferencia.

�MySQL Workbench� — ferramenta graficas de administracao/utilizacao.

http://dev.mysql.com/downloads/tools/workbench/

Alguns dos comandos mais uteis na linha de comando:

use — seleccionar uma base de dados;

show databases/tables — mostrar as bases de dados/tabelasacessıveis;

describe <nome da tabela> — mostra a informacao respeitanteaos campos de uma dada tabela.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 40 / 55

Page 45: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

MySQL

Uma base de dados de exemplo:

Avioes

matricula

nome

modelo

Marcas

modelo

lugares

autonomia

Pilotos

licencaPilotagem

nome

Voos

nVoo

partida

destino

data

hora

matricula

licencaPilotagem

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 41 / 55

Page 46: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP & MySQL

A ligacao entre o PHP e o MySQL e feita atraves de um conjunto defuncoes propria do PHP.

Ligacao ao Servidor MySQL funcao mysqli connect, argumentos:nomes do servidor, utilizador e senha de acesso.

@ $ligacao = mysqli connect($servidor,$utilizador,$senha,$basedados);

if (mysqli errno()) { // verifica a ligac~ao ao servidor

echo "<p>Erro: ligac~ao aos servidor n~ao possıvel</p>";

exit;

}

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 42 / 55

Page 47: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

PHP & MySQL

Comandos SQL: coloca-se a pesquisa que se quer efectuar numavariavel do tipo �string�, e apos isso usa-se a funcao mysqli query,tendo como argumentos os comandos SQL e a ligacao.

I Obter elementos$sql = "SELECT correio electronico,utilizador,senha FROM pessoa";

$resultado = mysqli query($ligacao,$sql);

I Inserir elementos$sql = "INSERT INTO pessoa (correio electronico,utilizador,senha)

VALUES (’[email protected]’,’Ana’,’xpto’)";

$resultado = mysqli query($ligacao,$sql);

Obtencao dos Resultados: os resultados sao obtidos atraves devarias funcoes, entre elas temos mysqli fetch assoc que permiterecolher os resultados obtidos numa tabela associativa;

$linha = mysqli fetch assoc($resultado);

$utilizador = $linha[’utilizador’];

$senha = $linha[’senha’];

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-I (2018/10/29 (v595)) 2018/2019 43 / 55

Page 48: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Exemplo Pratico 1

Dada a base de dados bdXProj2 (com x = 01, 02, . . .) construa:

formularios de entrada de valores para as varias tabelas.

uma pagina aonde se visualize o conteudo da tabela Voos.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 44 / 55

Page 49: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Exemplo Pratico — resolucao

1 Apache — convencoes — criacao da pagina pessoal (Linux):

1 criar o directorio public html

2 colocar as permissoes correctamente nesse directorio:F o directorio deve estar acessıvel para leitura para todos;F o caminho ate ao directorio tambem deve estar acessıvel (para leitura) para

todos.F todos os ficheiros no directorio public html devem ser acessıveis para leitura

para todos.

3 criar o ficheiro index.html, a �porta de entrada� para a pagina. Por exemplo:

<HTML><HEAD><TITLE>P r o j e c t o 2 − Grupo N</TITLE>

</HEAD><BODY><H2>P r o j e c t o 2 − Grupo N</H2>

<UL><LI>

<A HREF=” t r a b a l h o 2 . html ”>Traba lho 2 de Bases de Dados

</A></ LI>

</UL></BODY>

</HTML>

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 45 / 55

Page 50: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML & PHP

No ambito deste exemplo (de Base de Dados) os ficheiros HTML serao omais simples possıvel.Ficheiro de entrada do Exeplo, exemplo.html contendo uma lista naonumerada referenciando os dois pedidos:

um formulario de entrada de valores para a tabela pessoa.

uma pagina aonde se visualize o conteudo da tabela pessoa.

Por exemplo:

<BODY><H2>Exemplo de Bases de Dados</H2>

<UL><LI><A HREF=” v i s u a l i z a r . php”>V i s u a l i z e o c o n t e&u a c u t e ; do da t a b e l a</A>

</ LI><LI><A HREF=” i n s e r i r . html ”>I n t r o d u z i r novos v a l o r e s na t a b e l a</A>

</ LI></UL>

</BODY>

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 46 / 55

Page 51: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML & PHP & MySQL

A ligacao com a Base de Dados (MySQL) e feita atraves do PHP.

1 Fazer a ligacao a Bases de Dados. Como este e uma tarefa que terade ser repetida de todas as vezes que se queira obter/colocarinformacao na base de dados, o melhor sera criar um ficheiro PHPseparado, so para essa tarefa, ligacao.php.

<?php$ u t i l i z a d o r B D = $ SESSION [ ’ u t i l i z a d o r B D ’ ] ;$senhaBD = $ SESSION [ ’ senhaBD ’ ] ;$ s e r v i d o r = $ SESSION [ ’ s e r v i d o r ’ ] ;$nomeBD = ” bd01exemplo ” ;

@ $ l i g a c a o = m y s q l i c o n n e c t ( $ s e r v i d o r , $ u t i l i z a d o r , $senha , $basedados ) ;

i f ( m y s q l i e r r n o ( ) ) { // v e r i f i c a a l i g a c a o ao s e r v i d o recho ”<p>E r r o : l i g a&c c e d i l ;& a t i l d e ; o ao SGBD</p>” ;e x i t ; // te rm ina de imed i a t o

}?>

Notar a utilizacao das variaveis de sessao.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 47 / 55

Page 52: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Ligacao com a Base de DadosPor questoes de seguranca a senha de ligacao a base de dados (entre outros) nao deveficar exposta num ficheiro com acesso publico.Solucao:

1 Colocar a informacao sensıvel num ficheiro a parte (.dados.php);

2 colocar esse ficheiro numa zona exterior ao directorio (publico) public html, eprotege-lo (˜/DadosBD);

3 Ir buscar esses valores atraves de variaveis de sessao.

<?php$ SESSION [ ’ u t i l i z a d o r B D ’ ]=”bdXX” ;$ SESSION [ ’ senhaBD ’ ]=”senhaBDXX” ;$ SESSION [ ’ s e r v i d o r ’ ]=” r e n a 4 . mat . uc . pt ” ;

?>

Depois e so uma questao de utilizar sessoes e, sempre que se queira efectuar a ligacao abase de dados, carregar (require) os ficheiros apropriados:

<?phps e s s i o n\ s t a r t ( ) ;. . .// Faz a l i g a c a o a base de dadosr e q u i r e o n c e ( ’ . . / . . / DadosBD / . dados . php ’ ) ;r e q u i r e ( ’ l i g a . php ’ ) ;. . .

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 48 / 55

Page 53: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML & PHP & MySQLPara o caso da visualizacao dos conteudos da base de dados.

2 Enviar as pesquisas e receber os resultados (visualizar.php):

1 fazer a ligacao;2 construir o comando (�query�) SQL;3 enviar o comando ao SGBD;4 receber os resultados;5 processar/vizualizar os resultados.

Para o caso da introducao de novos dados na base de dados.

2 Construir um Formulario HTML (inserir.html):

1 especificar qual e o ficheiro PHP que vai processar os dados;2 especificar os campos que vao receber os dados.

3 Enviar as pesquisas e receber os resultados (processaInserir.php):

1 fazer a ligacao;2 receber os dados do formulario;3 construir o comando (�query�) SQL;4 enviar o comando ao SGBD;5 mostrar os resultados da consulta.

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 49 / 55

Page 54: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML & PHP & MySQL — visualizar.php

<?phps e s s i o n s t a r t ( ) ;echo ”<body><H2>Exemplo de Bases de Dados − V i s u a l i z a r Dados</H2>” ;// Faz a l i g a c a o a Bases de Dadosr e q u i r e ( ” . . / . . / DadosBD / . dados . php” ) ;r e q u i r e ( ” l i g a c a o . php” ) ;// Con s t r o i o comando SQL$ s q l = ”SELECT c o r r e i o e l e c t r o n i c o , u t i l i z a d o r , senha

FROM p e s s o a ” ;

// Env ia o comando ao SGBD$ r e s u l t a d o = m y s q l i q u e r y ( $ l i g a c a o , $ s q l ) ;

// r e s u l t a d o num ve c t o r a s s o c i a t i v oecho ”<CENTER>\n” ;echo ”<TABLE BORDER=’2’>\n” ;echo ”<TR><TH>U t i l i z a d o r </TH><TH>Senha</TH></TR>\n” ;// Os i d e n t i f i c a d o r e s dos campos da mat r i z sao os nomes dos campos da t a b e l a da bdw h i l e ( $ l i n h a = m y s q l i f e t c h a s s o c ( $ r e s u l t a d o ) ) {

$ u t i l i z a d o r = $ l i n h a [ ’ u t i l i z a d o r ’ ] ;$senha = $ l i n h a [ ’ senha ’ ] ;$ c o r r e i o E = $ l i n h a [ ’ c o r r e i o e l e c t r o n i c o ’ ] ;echo ”<TR>\n” ;echo ”<TD>$ u t i l i z a d o r </TD><TD>$senha</TD><TD>$ c o r r e i o E </TD>\n” ;echo ”</TR>\n” ;

}echo ”</TABLE>\n” ;echo ”</CENTER>\n” ;

?>

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 50 / 55

Page 55: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML & PHP & MySQL — inserir.html

<h2>Exemplo de Bases de Dados − I n t r o d u z i r Dados</h2><form a c t i o n =’ p r o c e s s a I n s e r i r . php ’ method=’ post ’><c e n t e r><t a b l e width =’90\%’ b g c o l o r =’ s k y b l u e ’ b o r d e r = ’2 ’><t r><th width =’100\%’ c o l s p a n = ’4 ’ a l i g n =’ center ’><b>I n t r o d u z i r Dados na Tabela ” p e s s o a ”{}</b>

</ th></ t r><t r><td a l i g n =’ center ’><b>U t i l i z a d o r</b></ td><td a l i g n =’ center ’><i n p u t type =’ text ’ name=’ U t i l i z a d o r ’ s i z e = ’15 ’ maxlength = ’15 ’></ td><td a l i g n =’ center ’><b>Senha</b></ td><td a l i g n =’ l e f t ’><i n p u t type =’ text ’ name=’Senha ’ s i z e = ’40 ’ maxlength = ’40 ’></ td>

</ t r><t r><td a l i g n =’ center ’><b>C o r r e i o E l e c t r o n i c o</b></ td><td a l i g n =’ center ’ c o l s p a n = ’3 ’><i n p u t type =’ text ’ name=’ C o r r e i o E ’ s i z e = ’100 ’ maxlength = ’100 ’>

</ td></ t r><t r><td width=100\% c o l s p a n = ’4 ’ a l i g n =’ center ’><i n p u t type =’ submit ’ v a l u e =’ I n s e r e a Nova Informacao ’>

</ td></ t r>

</ t a b l e></ c e n t e r>

</ form>

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 51 / 55

Page 56: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

HTML & PHP & MySQL — processaInserir.php

<?phps e s s i o n\ s t a r t ( ) ;

// Faz a l i g a c a o a Bases de Dadosr e q u i r e ( ” . . / . . / DadosBD / . dados . php” ) ;r e q u i r e ( ” l i g a c a o . php” ) ;

// Obtem os v a l o r e s do f o rmu l a r i o ( v a r i a v e l POST)$ c o r r e i o E = $ POST [ ’ C o r r e i o E ’ ] ;$ u t i l i z a d o r = $ POST [ ’ U t i l i z a d o r ’ ] ;$senha = $ POST [ ’ Senha ’ ] ;

// Con s t r o i o comando SQL$ s q l = ”INSERT INTO p e s s o a ( c o r r e i o E l e c t r o n i c o , u t i l i z a d o r , senha )

VALUES ( ’ $ c o r r e i o E ’ , ’ $ u t i l i z a d o r ’ , ’ $senha ’ ) ” ;

// Env ia o comando ao SGBD$ r e s u l t a d o = m y s q l i q u e r y ( $ l i g a c a o , $ s q l ) ;

i f ( $ r e s u l t a d o ) {echo ” I n t r o d u c a o de novos dados f e i t a com s u c e s s o .\n” ;echo ”<meta http−e q u i v =’ r e f r e s h ’ c o n t e n t = ’2; u r l=exemplo . html ’ />” ;

}e l s e {

echo ” E r r o − a i n t r o d u c a o de novos dados f a l h o u\n” ;echo ”{}<meta http−e q u i v =’ r e f r e s h ’ c o n t e n t = ’2; u r l=exemplo . html ’ />” ;

}?>

Pedro Quaresma (Matematica, FCTUC) Bases de Dados TP-II (2017/09/11 (v345)) 2018/2019 52 / 55

Page 57: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

Operacao de Divisao

PropriedadeI Seja q = r ÷ sI Entao q e a maior relacao satisfazendo q × s ⊆ r .

Definicao em termos de operacoes basicas da algebra rel.Sejam r(R) e s(S) relacoes, com S ⊂ R

r ÷ s = ΠR−S(r)− ΠR−S((ΠR−S(r)× s)− ΠR−S,S(r))

Porque?I ΠR−S(r)× s da os elementos de r com todos os valores de S .I ΠR−S,S(r) construi uma versao de r com os atributos da expressao

anterior.I ΠR−S(ΠR−S(r)× s)− ΠR−S,S(r)) da os tuplos t em ΠR−S(r) tal que

para algum tuplo u ∈ s, tu 6∈ r .

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2016/12/05 (v236)) 2018/2019 53 / 55

Page 58: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

MySQL — Exemplos de Consultas

Uma aproximacao as consultas do tipo ÷ (do manual do MySQL, 13.2.8.6)

Que tipos de lojas estao presentes em uma, ou mais, cidades?

SELECT DISTINCT t i p o s L o j a sFROM L o j a s

WHERE EXISTS (SELECT ∗FROM C i d a d e s L o j a s

WHERE C i d a d e s L o j a s . t i p o L o j a = L o j a s . t i p o s L o j a s ) ;

Que tipos de lojas estao presentes em nenhuma cidade?

SELECT DISTINCT t i p o L o j aFROM L o j a s

WHERE NOT EXISTS(SELECT ∗

FROM C i d a d e s L o j a sWHERE C i d a d e s L o j a s . t i p o L o j a s = L o j a s . t i p o L o j a s ) ;

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2016/12/05 (v236)) 2018/2019 54 / 55

Page 59: Bases de Dados - Te orico/Pr aticaspedro/lectivos/BasesDados/apontamentosPrati... · MySQL | Servidor/Grupos de Trabalho Cada grupo tem uma conta em ˝rena4.mat.uc.pt ˛, bdN, e tem

MySQL — Exemplos de Consultas

Que tipos de lojas estao presentes em todas as cidades?

SELECT DISTINCT s t o r e T y p eFROM S t o r e s

WHERE NOT EXISTS(SELECT ∗

FROM C i t i e sWHERE NOT EXISTS

(SELECT ∗ FROM C i t i e s S t o r e sWHERE C i t i e s S t o r e s . c i t y = C i t i e s . c i t y

AND C i t i e s S t o r e s . s t o r e T y p e = S t o r e s . s t o r e T y p e ) ) ;

Este ultimo exame e uma consulta �NOT EXISTS� duplamente embutida. Istoe, contem uma clausula �NOT EXISTS� dentro de uma outra clausula domesmo tipo.Formalmente, responde a questao �existe uma cidade com uma loja que nao estaem Lojas?�. E mais facil de ver que uma consulta �NOT EXISTS� duplamenteembutida responde a questao �e x verdade para todo o y?�

Pedro Quaresma (Matematica, FCTUC) Bases de Dados (2016/12/05 (v236)) 2018/2019 55 / 55