Departamento de Engenharia Informática 2014/2015 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na Figura 1. Figura 1. Base de dados de exemplo Para criar a base de dados é necessário criar as tabelas e carregar os registos de cada tabela. A criação das tabelas é feita com recurso à instrução CREATE TABLE. Por exemplo, a tabela de clientes pode ser criada com a seguinte instrução: create table customer ( customer_name varchar(255) not null unique, customer_street varchar(255) not null, customer_city varchar(255) not null, primary key(customer_name) ); Pág. 1 de 7
Esta instrução especifica o nome da tabela, os nomes das três colunas, o tipo de cada coluna, e ainda restrições tais como os valores não poderem ser NULL e o facto da chave primária da tabela ser o nome do cliente. Os registos de cada tabela são carregados através de instruções do tipo INSERT. Por exemplo: insert into customer values ( 'Jones', 'Main', 'Harrison' ); Nesta instrução são especificados, respectivamente, os valores de cada coluna pela mesma ordem em que estes foram definidos aquando da criação da tabela 1. Esta instrução resulta na criação de um novo registo na tabela de clientes. Note- se que o ficheiro bank.sql inclui instruções para inserir mais registos na base de dados do que aqueles que se encontram exemplificados na Figura 1. Estes registos serão usados para realizar vários testes sobre a base de dados. Em aulas de laboratório futuras, iremos utilizar esta base de dados para demonstrar vários dos conceitos da disciplina. Configurações Para começar a usar o sistema MySQL disponível na infra- estrutura do IST, deverá proceder aos seguintes passos: 1. Para poder fazer o que é solicitado neste laboratório, deverá aceder primeiro à página de self- service do CIIST: https://ciist.ist.utl.pt/servicos/self_service/index.php e activar os serviços shell, web e cgi 2. Para aceder ao sigma.ist.utl.pt, tem de usar um programa designado genericamente por Secure Shell. Em Windows pode usar um dos programas de SSH Secure Shell ou PuTTY ; em Linux ou Mac deve usar o comando ssh. Terá de usar as suas credenciais do Fenix (nome de utilizador e password do sistema Fénix) para entrar na sua conta do sigma. 3. Para obter a password da sua conta no MySQL, e após estar ligado ao cluster sigma, execute o comando: mysql_reset 4. Para entrar em sessão em sessão no MySQL use o comando: mysql - h db.ist.utl.pt - u istxxxxx p onde istxxxxx deve ser substituído pelo seu nome de utilizador no sistema Fénix, e deverá entrar com a password obtida no comando anterior 5. Para copiar ficheiros do seu PC para a sua área do sigma.ist.utl.pt deverá usar um programa específico de Secure Copy, ( WinSCP em Windows; scp em Linux). 1 Existem outras variantes da instrução INSERT com as quais é possível especificar os valores por outra ordem, ou especificar apenas alguns dos valores pretendidos deixando os restantes a NULL ou com o valor por omissão (default value, que neste caso não foi especificado) Pág. 2 de 7
Muito embora também possa ser utilizada a interface gráfica MySQL Workbench 2, como forma de interagir com o sistema de gestão de bases de dados MySQL, nas aulas de laboratório iremos sobretudo utilizar a interface de linha de comandos. Utilização da linha de comando Em geral todos os sistemas de gestão de base de dados dispõem de uma interface de linha de comando através da qual é possível executar instruções SQL e também outros comandos de administração e manutenção do sistema. 6. Coloque o ficheiro bank.sql na sua área pessoal no cluster sigma.ist.utl.pt que está no site da cadeira no Fenix. Caso esteja a fazer o download a partir de um dos PCs do laboratórios em Linux, então esta cópia não será necessária dado que o download do browser já deixa os ficheiros na vossa área no sigma. 7. Entre na sua área do sigma, como explicado no passo 2, e navegue até ao directório onde guardou o ficheiro. 8. Entre no MySQL, como explicado no passo 3 e 4. 9. Uma vez dentro do MySQL, utilize o comando: USE istxxxxx para se ligar à sua base de dados com o nome istxxxxx, em que istxxxxx deve ser substituído pelo seu nome de utilizador. 10. Use help para obter informação sobre os comandos disponíveis. 11. Se precisar de sair do programa, pode utilizar a qualquer momento o comando: quit 12. Na lista de comandos terá notado a existência de um comando nesta forma: source (\.) Execute an SQL script file. Takes a file name as an argument. 13. É este comando que deverá utilizar para executar as instruções no ficheiro bank.sql. source bank.sql O sistema produz algumas mensagens à medida que executa as instruções do ficheiro. 14. Para listar as tabelas da base de dados, use o comando: show tables; 15. Após a ligação à base de dados pode fazer algumas consultas, nomeadamente: 2 A interface MySQL Workbench encontra- se disponível em http://www.mysql.com/products/workbench/ Pág. 3 de 7
ver a lista completa de clientes: SELECT * FROM customer; ver a lista completa de contas: SELECT * FROM account; ver o saldo da conta A- 101: SELECT balance FROM account WHERE account_number='a- 101'; Em aulas futuras verá como obter a resposta a consultas mais complexas. Obter informação sobre o esquema de uma base de dados Para uma base de dados existente no sistema mas sobre a qual não haja documentação, é possível usar instruções especiais para obter informação sobre as respectivas tabelas. Geralmente estes mecanismos são proprietários e diferentes para cada sistema. 16. Utilize o comando SHOW DATABASES; para obter informação sobre as bases de dados existentes no sistema. 17. Para se ligar à sua base de dados, utilize o comando: USE istxxxxx (onde istxxxxx é o seu nome de utilizador) 18. Para listar as tabelas da base de dados, use o comando: SHOW TABLES; 19. Obtenha informação sobre as tabelas de clientes e contas: DESCRIBE customer; DESCRIBE account; Confirme que a estrutura dessas tabelas está de acordo com as instruções que foram dadas no ficheiro bank.sql. 20. Use o comando quit para sair do sistema e voltar ao terminal. Pesquisas full- text no sistema MySQL O sistema MySQL tem atualmente suporte para a indexação e pesquisa com base em restrições full- text. As consultas deste tipo permitem selecionar registos com base na ocorrência de palavras ou expressões de língua natural. As pesquisas full- text podem fazer uso de stopwords (i.e., palavras muito frequentes que não devem ser consideradas, como a, e, ou que), podem usar restrições Booleanas, e podem envolver a ordenação dos resultados de acordo com a sua relevância. Pág. 4 de 7
21. Use os seguintes comandos para criar uma tabela de nome bank_news, e para lhe associar os conteúdos textuais de artigos noticiosos relevantes no domínio de um banco. Note que a criação da tabela envolve também um índice que suporta a execução de pesquisas full- text. create table bank_news ( id int primary key, title varchar(250), body text, fulltext ( title, body ) ) engine=myisam; insert into bank_news values ( 1, 'New Perryridge branch', 'The new Perryridge branch, in the city center, has opened today.'); insert into bank_news values ( 2, 'Customer feedback', 'Customers from the Brighton branch, located in the center of the city, have provided a great deal of positive feedback.'); insert into bank_news values ( 3, 'New focus group', 'Several Perryridge branch staff have been promoted to a skilled team who are focused on improving customer relations.'); insert into bank_news values ( 4, 'New staff', 'Several new staff members have been hired for the Brighton branch.'); insert into bank_news values ( 5, 'Branch in Redwood', 'New branch in Redwood is bringing us closer to clients in the area.'); 22. Após proceder à criação da tabela, pode executar consultas envolvendo restrições sobre os conteúdos textuais dos artigos noticiosos. Encontrar todos os artigos cujo conteúdo se relacione com city center : select * from bank_news where match(title, body) against ('"city center"' in boolean mode); Encontrar todos os artigos relacionados com Perryridge, apresentando os resultados ordenados de acordo para com a sua relevância: select *, match(title, body) against('perryridge') as score from bank_news where match(title, body) against('perryridge') order by score desc; Pág. 5 de 7
Encontrar todos os artigos relacionados com o balcão Perryridge, mas não relacionados com opened, usando para isso restrições Booleanas na interrogação: select * from bank_news where match(title, body) against('+perryridge - opened' in boolean mode); Resumo dos comandos MySQL utilizados help quit ou exit source file use database show tables; show databases; describe table; Obter informação sobre todos os comandos disponíveis. Sair da linha de comando do MySQL. Executar os comandos contidos no ficheiro indicado. Ligar à base de dados indicada. Listas as tabelas da base de dados actual. Listar todas as bases de dados existentes no sistema. Obter informação sobre a estrutura de uma tabela. Desenvolvimento de aplicações com bases de dados MySQL : Exemplo em PHP Os passos seguintes têm por objectivo testar a ligação à base de dados através de um script PHP. 23. Edite o ficheiro test.php e coloque o seu nome de utilizador e password (dada pelo mysql_reset) nas variáveis $user e $password, respectivamente. 24. Usando um cliente de SCP ( WinSCP em Windows; scp em Linux) coloque o ficheiro test.php dentro da pasta web da sua área no cluster sigma.ist.utl.pt 25. Abra o browser e aceda ao URL: http://web.ist.utl.pt/istxxxxx/test.php onde istxxxxx é o seu nome de utilizador no sistema Fénix. 26. Confirme que o script corre correctamente e sem erros. 27. Abra o ficheiro test.php num editor e localize as chamadas à biblioteca PHP Data Objects (PDO), a qual é utilizada como forma de interagir com uma base de dados como o MySQL, a partir de um script PHP: Pág. 6 de 7
$db = new PDO( ) $db- >query( ) 28. No ficheiro test.php, localize a consulta à base de dados: SELECT * FROM account; Compare o resultado desta consulta, que aparece no browser, com o resultado que obteve através da linha de comando. 29. No ficheiro test.php, localize o sítio onde está a ser construída uma tabela HTML para mostrar os resultados: <table> e </table> definem o início e fim da tabela HTML <tr> e </tr> definem o início e fim de uma linha da tabela HTML <td> e </td> definem o início e fim de uma célula na tabela HTML Esta é a forma típica de construção de tabelas em HTML. Repare que a tabela está a ser construída dentro de um ciclo que percorre os resultados de $db- >query( ) 30. No browser, abra o código fonte da página e compare esse código HTML com o código PHP do ficheiro de script test.php. Pág. 7 de 7