Os comandos SQL utilizados nas aulas práticas e mostrados aqui foram feitos num interpretador de comandos: psql



Documentos relacionados
Bases de Dados. PostgreSQL, MySQL e Php Transações. P. Serendero,

CONCORRÊNCIA. Buscando aumentar os níveis de concorrência redução da espera em detrimento do isolamento, a SQL definiu alguns níveis de isolamento.

CONCORRÊNCIA. 1. Introdução. Recursos exclusivos. Não necessita controle. Abundância de recursos compartilhados. Controle necessário mas mínimo

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

trigger insert, delete, update

EXAME DE 1ª ÉPOCA Semestre de Verão 2004/ Junho 2005 duração: 2h30m

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

Bases de Dados 2007/2008. Aula 9

Controle de transações em SQL

GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

Transações Seguras em Bancos de Dados (MySQL)

PHP. Hypertext Pre-Processor

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Internet e Programação Web

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Tarefa Orientada 15 Manipulação de dados

Sistemas de Informação

SQL: Definição de tabelas, Modificações à Base de Dados

2 echo "PHP e outros.";

Tarefa Orientada 19 Triggers

Bases de Dados. Lab 1: Introdução ao ambiente

Hugo Pedro Proença, 2007

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

Java na Web. Aplicações Web

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

DSS 08/09. Camada de Dados - JDBC. Aula 1. António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jfc}@di.uminho.

SQL Structured Query Language

Relatório. Projecto de Base de Dados Parte 2. Turno: quinta-feira, 11:30 Grupo 25: André Gonçalves Rui Barradas Hélton Miranda 68477

Desenvolvimento de Sistemas Web Prof. Leandro Roberto. Aula 18 JavaScript: Eventos MySQL PHP (insert, update e delete)

Bases de Dados 1º semestre

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Bases de Dados. Lab 7: Desenvolvimento de aplicações com PHP

P S I 2. º A N O F 5 M E S T R E / D E T A L H E E P E S Q U I S A. Criar uma relação mestre-detalhe. Pesquisa de informação

Informática para Ciências e Engenharias 2012/13. Teórica 10

Sensor de temperatura Parte 5 Cleiton Bueno Preparando o ambiente do Banco de dados Mysql

A & F Consultoria em Sistemas e Treinamentos 2014 af.tecnoserv@gmail.com. A linguagem SQL. Autor: Hélio de Almeida Fonte: Wikipédia

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

BANCO DE DADOS: SQL. Edson Anibal de Macedo Reis Batista. 27 de janeiro de 2010


TRANSAÇÕES. Considerando que estes comandos fazem parte de uma TRANSAÇÃO (veremos como indicar isso):

Integridade dos Dados

PHP e MySQL Autenticação de Usuários

17/10/2008. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Redes de Computadores

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

Módulo 6: Linguagem de Programação IV 6.1. Introdução 6.2. Bases de Dados Visão Estrutural SGBD: Sistema de Gestão de Bases de Dados

Banco de Dados. Maurício Edgar Stivanello

SQL Gatilhos (Triggers)

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Treinamento sobre SQL

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

SISTEMA GERENCIAMENTO DE PRODUTOS PHP E MySQL 1. APRESENTAÇÃO

O que é o JavaScript?

Banco de Dados. Prof. Antonio

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

14/08/2008. Curso Superior de Tecnologia em Banco de Dados Disciplina: Projeto de Banco de Dados Relacional 1 Prof.: Fernando Hadad Zaidan

Introdução ao PHP. Prof. Késsia Marchi

PostgreSQL. André Luiz Fortunato da Silva Analista de Sistemas CIRP / USP alf@cirp.usp.br

Bases de Dados 2012/2013 Restrições de Integridade em SQL. Helena Galhardas 2012 IST. Bibliografia

Podemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto :

Programação SQL. Introdução

Tarefa Orientada 16 Vistas

PHP INTEGRAÇÃO COM MYSQL PARTE 2

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Leonardo Gresta Paulino Murta

Programação web Prof. Wladimir

Armazenamento organizado facilitando SCRUD; Agiliza processo de desenvolvimento de sistemas;

A linguagem SQL

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP

Limpeza e transformação de dados

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

Sumário. Introdução a Transações

Bases de Dados 2005/2006. Aula 5

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Transcrição:

Bases de Dados PostgreSQL e Php Transacções Joins, agregações, vistas P. Serendero, 2011 1

PostgreSQLe Php: transacções Os comandos SQL utilizados nas aulas práticas e mostrados aqui foram feitos num interpretador de comandos: psql Para desenvolver aplicações os comandos de SQL aparecem misturados numa linguagem de programação Neste módulo mostramos como fazer chamados sqldesde a linguagem Php 2

PostgreSQLe Php: transacções O Php é uma linguagem interpretada. scripting language PHP, é a sigla de Hypertext Preprocessor, Lerdorf 1995 Uma linguagem open-sourcepara utilização geral, especialmente adaptada para desenvolvimento Web Pode ser embebida em HTML. Uma linguagem que funciona no lado do servidor Interpretada no web server com um processador A sintaxe vem de C, C, Java, e Perl O principal objectivo desta linguagem é permitir escrever páginas web dinamicamente geradas Manual. http://www.php.net/manual/en/index.php 3

PostgreSQLe Php: transacções scriptinglanguage: uma linguagem de programação que permite o controlo de uma ou mais aplicações Os chamados a SQL são interpretados previamente por um pre-processador Consultar o Manual do PostreSQL: Programer s Guide Client Interfaces Em php existem extensões do PostgreSQL. Incluem sql embebido Ver http://php.net/manual/en/book.pgsql.php / 4

PostgreSQLe Php: transacções ANTES de utilizar a BD é preciso abrir. No fim devemos fechar Abrir a base de dados desde php <?php include'/dir1/dir11/bibliotecas/biblio-1.php'; $db= dbconnect(); //ligar a bdde dcbm if(!$db) { printf("<p>erro ao abrir a Base de Dados. Contactar o Administrador da BD :).</p> \n"); exit(); } pg_close($db); // fechar a bdno fim?> 5

PostgreSQLe Php: transacções <?php function dbconnect() //-------------------------- { $hostname="localhost"; $db_name= nome-bd"; $db_user = postgres"; $user_psw= lasdflakjasdfj"; $connection_string ="host=$hostname dbname = $db_name user =$db_user password = $user_psw"; $db = pg_connect($connection_string); // abrir a BD desde php if(!$db) { printf("<p> Nãohá ligaçãocom a base de dados. Ensaiar mais tarde. </p>\n"); exit(); } return $db; }?> 6

PostgreSQLe Php: interrogar $OK = pg_query($db, $instrução-sql); Executa o query indicado na string $instrução-sql na base de dados indicada na ligação prévia a base de dados representada aqui pela variável $db Em caso de erro, devolve NULL (pode-se verificar sempre o $OK Pormenores do erro se podem encontrar na função pg_last_error() se a ligação a bd era válida O primeiro parâmetro é opcional, mas não recomendável não incluir 7

PostgreSQLe Php: SELECT if($tripulante) { $query_tripulante = "SELECT* FROM tripulante WHERE nif = $tripulante "; $res = pg_query($conexao, $query_tripulante); if($res) { $c=pg_fetch_array($res); echo$c[0]."<-nome\n"; echo$c[1]."<-morada\n"; } elseerror pg_fetch_array Carrega um tuplo como um array. parareferenciaroselementosdo array, podem-se utilizar indices ou os nomes dos atributos da tabela 8

PostgreSQLe Php: SELECT function valida_chave($db, $tabela, $campo, $chave) {//------------------------------------------------------------------ $instr= "SELECT* FROM $tabelawhere $campo= '$chave'"; $id = pg_query($db, $instr); $row = pg_fetch_row($id); if($row[0]!= $chave) return 0; elsereturn1; }//---------------------------------------------------------------------- pg_fetch_row:semelhante a pg_fetch_arraysó que apenas refere os elementos utilizando índices Isto é, devolve um arranjo numerado com índices 9

PostgreSQLe Php: SELECT //---------------------------------------------------------------- function get_nome_disciplina($db, $id_disciplina) { $query = "SELECT* FROM grupo_curricular WHERE id= '$id_disciplina' "; $resultado = pg_query($db, $query); if($resultado) { $r = pg_fetch_array($resultado); return$r['nome']; } else return NULL: } //------------------------------------------------------------------------- 10

INSERIRtuplos tuplosdinamicamente: HTML <html> Iniciar um bloco de html <head> <title>deei-ualg</title> <link rel="shortcut icon" href= /deei/icon.ico" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <formname= utilizador" action= validar-user.php" method="post" enctype="application/x-www-form-urlencoded"> Nome Utilizador: <INPUT TYPE = "text" value="" name="usuario /> Password: <INPUT TYPE = PASSWORD value ="" name="passwd /> <p> <input type="submit" value ="Validar" name = "go"></p> </form> </html> Após submit, HTML carrega todos os dados de <input> no array $_POST 11

INSERIRtuplos tuplosdinamicamente ***** este é o programa validar-user.php <?php $usuario = $_POST['usuario']; $passw = $_POST['passw']; $nivel= $_POST['nivel']; $data= $_POST['data']; date_default_timezone_set("europe/lisbon"); $data = date(); if (verifica_utilizador($db, $usuario)) //verifica se utilizador existe show_error("já existe um usuariocom este nome. Favor trocar por um outro.",1); $sqlcmd= "INSERT INTO utilizador ( usuario, passw, data) VALUES ('$usuario', '$passw', '$data')"; $OK = pg_query($db, $sqlcmd); //inserir registo na bd. pg_close($db); //após inserção, fechar a BD if(!$ok) show_error(1); else mandar_aviso("novo Utilizador(a): $usuario- criado(a)", 4);?> 12

PostgreSQLe Php: UPDATE SQL: UPDATE utilizador SET passw = D67N9#%BB, data = 11/1172011, WHERE usuario = patricio ; ---------------------------Php----------------------------------------- $usuario = $_POST['usuario']; $passw1 = $_POST['passw1']; $passw2 = $_POST['passw2']; if($passw1!= passw2) show_error( password incorrecto. Repetir sff",1); $cmd= "UPDATE utilizador SET passw='$passw1', WHERE usuario= '$usuario' "; If( pg_query($db, $cmd)) echo user alterado com sucesso ; 13

PostgreSQLe Php: APAGAR SQL DELETEFROM climatologiawhere city = London ; --------------------------------------Php----------------------------------------------- function apagar_registo($db, $bi) { $apagar= "DELETE FROM sociowhere bi= '$bi'"; $OK = pg_query($db, $apagar); if($ok) return("registo sócio nº BI: $bi apagado. \n"); else return( erro: Registo socio nº BI: $bi NÃO apagado\n"); 14

SQL : Transacções Uma Base de Dados tem sempre acessos concorrentes: muitos utilizadores que estão fazer insert, update, delete simultaneamente Para cada utilizador, o SGBD abre um novo processo. Uma nova sessão até este sair da BD. (fechar) Como assegurar a integridade e coerência da BD? Exemplos críticos: reservas bilhetes online, bancos, bolsa, 15

SQL : Transacções O que se passa quando o acesso é concorrente e a um mesmo registo da BD? Por exemplo, a sua conta bancária: Você anda a tirar 30 da sua conta, mas o seu pai ainda não fez depósito também na sua conta Como deveríam acontecer as coisas? Qual transacção primeiro? A conta do seu pai é actualizada depois de lhe depositar os 30 Que se passa se a sua irmã sabe a sua conta e está intentar retirar 20 no mesmo momento que você pretende levantar os 30 que precisa? Que se passa se a BD do banco crasha no meio disto tudo? 16

SQL : Transacções Uma transacção é uma sequência de operações SQL Esta sequência é tratada como um todo Por defeito, uma instrucção de SQL é uma transacção As transacções obedecem as propriedades ACID": Atomicity Consistency Isolation Durability (Ver na introdução) 17

SQL : Transacções Atomicidade: A transacção é um todo. Toda a transacção completada ou nada feito Consistência Os dados devem sempre cumprir as restrições impostas sobre eles no fim, mesmo que transitoriamente estas possam serem violadas Isolamento Duas transacções a correr simultaneamente: os seus efeitos devem ficar isolados. Deve acontecer tal como se só uma transacção tivesse ocorrido. Transparente ao utilizador Durable Terminada uma transacção, os seus efeitos devem perdurar, mesmo se o sistema crachar (system crash) 18

SQL : Transacções em SQL BEGIN WORK inicia uma transacção COMMIT WORK termina uma transacção. BD actualizada ROLLBACK WORK igualmente termina uma transacção. Semelhante a fazer um undo Por defeito, uma instrução SQL é uma transacção 19

SQL : Transacções em SQL Numa operação de inserção fazer LOCK na tabela: BEGIN WORK; LOCK TABLE tripulante IN SHARE MODE; SELECT id_tripulante FROM tripulante WHERE nome = Alberto Martins Lopes ; INSERT INTO folha_tripulante VALUES ( _id_, 914563312 ); COMMIT WORK; Isolara tabela com a chaveprimáriano modoshare, quando se pretendeactualizarumatabelaondeala é foreign key Atenção: no standard SQlnãohálock table set transaction 20

SQL : Transacções em SQL Numa operação de apagar fazer LOCK na tabela com a chave primária: BEGIN WORK; LOCK TABLE filmes IN SHARE ROW EXCLUSIVE MODE; DELETE FROM commentarios_filmes WHERE id IN (SELECT id FROM filmeswhere nivel< 5); DELETE FROM filmeswhere nivel< 5; COMMIT WORK; 21

SQL : Transacções em SQL No standard SQL Por exemplo para a conta do seu pai no depósito dos 30 para sim, o banco terá as instruções: BEGIN WORK; UPDATE conta SET saldo = saldo -30 WHERE numero = 333; //a conta do seu pai UPDATE conta SET saldo = saldo + 30 WHERE numero = 888; // a sua conta COMMIT WORK; Se algo correr mal, o dinheiro não será posto na sua conta, mas também não será levantado da conta do seu pai 22

SQL : Transacções em SQL Os utilizadores (programas) só vem resultados de transacções que fizeram COMMIT E que acontece se no meio da transacção do seu pai, a sua mãe que também tem acesso a conta do seu pai fazer uma transacção e o programa de aplicação no processo dela utiliza igualmente o COMMIT? SQL tem 4 níveis de isolamento das transacções: 1. SERIALIZABLE 2. REPEATABLE READ 3. READ COMMITTED 4. READ UNCOMMITTED Compete ao programador especificar o nível de isolamento pretendido 23

SQL : Transacções em SQL Nível: 1. SERIALIZABLE 2. REPEATABLE READ 3. READ COMMITTED 4. READ UNCOMMITTED Escrevemos: SET TRANSACTION ISOLATION LEVEL <nivel> 24

SERIALIZABLE SQL : Transacções em SQL Se o programa da sessão do seu pai está a correr com o nível de isolamento SERIALIZABLE, só vai ver o seu saldo final depois a sessão da sua mãe que entrou pelo meio terminar pela sua vez. No meio delas não vai ver nada diferente do estado anterior da sua conta antes do inicio destas duas transacções feitas por dois processos concorrentes 25

READ COMMITTED SQL : Transacções em SQL Neste caso, é possível ver o estado parcial da conta após a primeira destas transacções serem tratadas REPETEABLE READ semelhante ao anterior a diferencia é que se um tuploé lido uma vez, então terá de ser forçosamente devolvido se a leitura for repetida 26

SQL : Transacções em SQL READ UNCOMMITTED Se a transacção utilizar esta opção então pode ler os dados transitórios que possam ter sido escritos por outras transacções Por exemplo, poderá ler um saldo inferior na conta, mesmo se a transacção concorrente que levantava dinheiro crashar no meio e a aplicação fazer um ROLLBACK 27

SQL : Transacções em SQL No caso do PostgreSQLsó existem as opções SERIALIZABLE e READ COMMITTED SERIALIZABLE Oferece um maior nível de isolamento. Faz como se as transacções tivessem sido feitas sequencialmente e não concorrentemente. READ COMMITTEDdá menos isolamento, mas é mais eficiente de implementar pelo SGBD. Pretende manter a consistência dos dados Ler sobre concurrency control no manual do PostreSQL 28

PostgreSQLe Php Transacções fim do módulo 29