Anda di halaman 1dari 79

MySQL

24 de novembro de 2006

Sumrio
I Sobre essa apostila 3 5 10
11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 12 12 12 13 13 14 15 15 16 16 16 16 17 19 21 25 26 26 27 29 29 29 30 31 31 32

II Informaes Bsicas III MySQL


1 O que o Mysql 2 Plano de ensino 2.1 Objetivo . . . 2.2 Pblico Alvo . 2.3 Pr-requisitos 2.4 Descrio . . 2.5 Metodologia . 2.6 Cronograma 2.7 Programa . . 2.8 Avaliao . . 2.9 Bibliograa .

3 Mysql 3.1 Viso Geral . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Banco de Dados . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Conceitos Fundamentais sobre Banco de Dados 3.2.2 Introduo ao Banco de Dados . . . . . . . . . . 3.2.3 Modelo Entidade Relacionamento . . . . . . . . 3.2.4 Tipos de Relacionamento . . . . . . . . . . . . . 3.2.5 Normalizao . . . . . . . . . . . . . . . . . . . . 3.3 Lio 1 - O que o MySQL? . . . . . . . . . . . . . . . 3.3.1 Introduo . . . . . . . . . . . . . . . . . . . . . 3.3.2 As Prinipais caractersticas do MySQL . . . . . . 3.4 Lio 2 - Instalando o MySQL . . . . . . . . . . . . . . . 3.4.1 Instalando o MySQL no Debian - 1 . . . . . . . . 3.4.2 Instalando o MySQL no Debian - 2 . . . . . . . . 3.4.3 Instalando o MySQL no Debian - 3 . . . . . . . . 3.4.4 Instalando a partir dos fontes - 1 . . . . . . . . . 3.4.5 Instalando a partir dos fontes -2 . . . . . . . . . 3.4.6 Congurao / Testes . . . . . . . . . . . . . . . 1

CDTC

Centro de Difuso de Tecnologia e Conhecimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Brasil/DF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 34 35 35 37 37 38 39 39 39 41 43 44 45 46 46 46 47 49 50 52 52 53 53 54 54 55 57 59 59 60 61 61 62 63 65 65 65 66 67 67 69 70 72 73 74 75 76

3.5 Lio 3 - Aplicabilidade e Uso . . . . . . . . . . . . . . . . . 3.5.1 Um pouco da histria do SQL . . . . . . . . . . . . . 3.5.2 Aplicabilidade e uso . . . . . . . . . . . . . . . . . . 3.5.3 Tipos de Comandos . . . . . . . . . . . . . . . . . . 3.6 Lio 4 - Criando e selecionando um banco de dados . . . 3.6.1 Comandos de Acesso . . . . . . . . . . . . . . . . . 3.6.2 Criando e selecionando um banco de dados . . . . 3.7 Lio 5 - Criando e manipulando Tabelas . . . . . . . . . . 3.7.1 Tipos de Tabelas . . . . . . . . . . . . . . . . . . . . 3.7.2 Criando uma tabela . . . . . . . . . . . . . . . . . . 3.7.3 Tipos de Campos . . . . . . . . . . . . . . . . . . . 3.7.4 Alterando campos da tabela . . . . . . . . . . . . . . 3.7.5 Primary Key e Foreign Key . . . . . . . . . . . . . . 3.7.6 Carregando dados em uma tabela . . . . . . . . . . 3.8 Lio 6 - Consultando uma tabela . . . . . . . . . . . . . . 3.8.1 A instruo SELECT . . . . . . . . . . . . . . . . . . 3.8.2 Selecionando todos os dados / UPDATE E DELETE 3.8.3 Selecionando registros especcos . . . . . . . . . 3.8.4 Selecionando colunas especcas . . . . . . . . . . 3.8.5 Utilizando mltiplas tabelas . . . . . . . . . . . . . . 3.9 Lio 7 - A clusula ORDER BY . . . . . . . . . . . . . . . 3.9.1 Ordenando Registros . . . . . . . . . . . . . . . . . 3.9.2 Ordenando de forma decrescente . . . . . . . . . . 3.9.3 Ordenando por mltiplas colunas . . . . . . . . . . . 3.10 Lio 8 - Funes pr-denidas . . . . . . . . . . . . . . . . 3.10.1 Clculo de Datas . . . . . . . . . . . . . . . . . . . . 3.10.2 Contando Registros / GROUP BY . . . . . . . . . . 3.10.3 Outras Funes bsicas . . . . . . . . . . . . . . . . 3.11 Lio 9 - Conectando e Desconectando do Servidor . . . . 3.11.1 Congurando os Privilgios Iniciais do MySQL . . . 3.11.2 Conectando e Desconectando do Servidor . . . . . 3.12 Lico 10 - Adicionando Novos Usurios ao MySQL . . . . . 3.12.1 Um pouco sobre as intrues REVOKE E GRANT . 3.12.2 Nomes de Usurios e Senhas do MySQL . . . . . . 3.12.3 Adicionando Novos Usurios ao MySQL . . . . . . . 3.13 Lio 11 - Ferramentas Grcas de Adminstrao . . . . . 3.13.1 Conheendo algumas ferramentas . . . . . . . . . . 3.13.2 Instalando o PhpMyAdmin . . . . . . . . . . . . . . 3.13.3 Acessando o PhpMyAdmin . . . . . . . . . . . . . . 3.13.4 Tela de apresentao . . . . . . . . . . . . . . . . . 3.13.5 Criando banco de Dados no PhpMyAdmin . . . . . 3.13.6 Criando tabelas no PhpMyAdmin . . . . . . . . . . . 3.13.7 Adicionando Novos Usurios no PhpMyAdmin . . . 3.14 Lio 12 - Stored Procedures e Funes . . . . . . . . . . . 3.14.1 Sintaxe de Stored Procedure . . . . . . . . . . . . . 3.14.2 Exemplos de Stored Procedures e Functions . . . . 3.14.3 Declarando Variveis . . . . . . . . . . . . . . . . . 3.14.4 Condies . . . . . . . . . . . . . . . . . . . . . . . 2

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.14.5 Laos de Repetio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Parte I

Sobre essa apostila

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Contedo
O contedo dessa apostila fruto da compilao de diversos materiais livres publicados na internet, disponveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br. O formato original deste material bem como sua atualizao est disponvel dentro da licena GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seo de mesmo nome, tendo inclusive uma verso traduzida (no ocial). A reviso e alterao vem sendo realizada pelo CDTC (suporte@cdtc.org.br), desde outubro de 2006. Criticas e sugestes construtivas so bem-vindas a qualquer tempo.

Autores
A autoria deste contedo, atividades e avaliaes de responsabilidade de Joao Paulo Claudino de Souza. O texto original faz parte do projeto Centro de Difuso de Tecnolgia e Conhecimento, que vem sendo realizado pelo ITI em conjunto com outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software junto a outras entidades no pas. Informaes adicionais podem ser obtidas atrves do email ouvidoria@cdtc.org.br, ou da home page da entidade, atrves da URL http://www.cdtc.org.br.

Garantias
O material contido nesta apostila isento de garantias e o seu uso de inteira responsabilidade do usurio/leitor. Os autores, bem como o ITI e seus parceiros, no se responsabilizam direta ou indiretamente por qualquer prejuzo oriundo da utilizao do material aqui contido.

Licena
Copyright 2006,Joao Paulo Claudino de Souza. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOSTILA. A copy of the license is included in the section entitled GNU Free Documentation License.

Parte II

Informaes Bsicas

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Sobre o CDTC
Objetivo Geral O Projeto CDTC visa a promoo e o desenvolvimento de aes que incentivem a disseminao de solues que utilizem padres abertos e no proprietrios de tecnologia, em proveito do desenvolvimento social, cultural, poltico, tecnolgico e econmico da sociedade brasileira. Objetivo Especco Auxiliar o Governo Federal na implantao do plano nacional de software no-proprietrio e de cdigo fonte aberto, identicando e mobilizando grupos de formadores de opinio dentre os servidores pblicos e agentes polticos da Unio Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negcio da tecnologia da informao e de novos negcios de comunicao com base em software no-proprietrio e de cdigo fonte aberto, oferecendo treinamento especco para tcnicos, prossionais de suporte e funcionrios pblicos usurios, criando grupos de funcionrios pblicos que iro treinar outros funcionrios pblicos e atuar como incentivadores e defensores de produtos de software no proprietrios e cdigo fonte aberto, oferecendo contedo tcnico on-line para servios de suporte, ferramentas para desenvolvimento de produtos de software no proprietrios e de seu cdigo fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educao, pesquisa, desenvolvimento e teste de produtos de software livre.

Guia do aluno
Neste guia, voc ter reunidas uma srie de informaes importantes para que voc comece seu curso. So elas: Licenas para cpia de material disponvel Os 10 mandamentos do aluno de Educao a Distncia Como participar dos foruns e da wikipdia Primeiros passos muito importante que voc entre em contato com TODAS estas informaes, seguindo o roteiro acima.

Licena
Copyright 2006, Joao Paulo Claudino de Souza. dada permisso para copiar, distribuir e/ou modicar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior 7

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

pblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU".

Os 10 mandamentos do aluno de educao online


1. Acesso Internet: ter endereo eletrnico, um provedor e um equipamento adequado pr-requisito para a participao nos cursos a distncia. 2. Habilidade e disposio para operar programas: ter conhecimentos bsicos de Informtica necessrio para poder executar as tarefas. 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distncia conta muitos pontos, pois ir colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores. 4. Comportamentos compatveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo. 5. Organizao pessoal: planejar e organizar tudo fundamental para facilitar a sua reviso e a sua recuperao de materiais. 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigaes e realiz-las em tempo real. 7. Curiosidade e abertura para inovaes: aceitar novas idias e inovar sempre. 8. Flexibilidade e adaptao: requisitos necessrio mudana tecnolgica, aprendizagens e descobertas. 9. Objetividade em sua comunicao: comunicar-se de forma clara, breve e transparente ponto - chave na comunicao pela Internet. 10. Responsabilidade: ser responsvel por seu prprio aprendizado. O ambiente virtual no controla a sua dedicao, mas reete os resultados do seu esforo e da sua colaborao.

Como participar dos fruns e Wikipdia


Voc tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira o uso dos fruns de notcias e de dvidas gerais que se distinguem pelo uso: . O frum de notcias tem por objetivo disponibilizar um meio de acesso rpido a informaes que sejam pertinentes ao curso (avisos, notcias). As mensagens postadas nele so enviadas a todos participantes. Assim, se o monitor ou algum outro participante tiver uma informao que interesse ao grupo, favor post-la aqui. Porm, se o que voc deseja resolver alguma dvida ou discutir algum tpico especco do curso. recomendado que voc faa uso do Forum de dvidas gerais que lhe d recursos mais 8

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

efetivos para esta prtica. . O frum de dvidas gerais tem por objetivo disponibilizar um meio fcil, rpido e interativo para solucionar suas dvidas e trocar experincias. As mensagens postadas nele so enviadas a todos participantes do curso. Assim, ca muito mais fcil obter respostas, j que todos podem ajudar. Se voc receber uma mensagem com algum tpico que saiba responder, no se preocupe com a formalizao ou a gramtica. Responda! E no se esquea de que antes de abrir um novo tpico recomendvel ver se a sua pergunta j foi feita por outro participante. A segunda forma se d pelas Wikis: . Uma wiki uma pgina web que pode ser editada colaborativamente, ou seja, qualquer participante pode inserir, editar, apagar textos. As verses antigas vo sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um timo suporte a processos de aprendizagem colaborativa. A maior wiki na web o site "Wikipdia", uma experincia grandiosa de construo de uma enciclopdia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em portugus pelos links: Pgina principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaborao com a aprendizagem do grupo!

Primeiros Passos
Para uma melhor aprendizagem recomendvel que voc siga os seguintes passos: Ler o Plano de Ensino e entender a que seu curso se dispe a ensinar; Ler a Ambientao do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas bsicas do mesmo; Entrar nas lies seguindo a seqncia descrita no Plano de Ensino; Qualquer dvida, reporte ao Frum de Dvidas Gerais.

Perl do Tutor
Segue-se uma descrio do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal um modelo de excelncia: consistente, justo e prossional nos respectivos valores e atitudes, incentiva mas honesto, imparcial, amvel, positivo, respeitador, aceita as idias dos estudantes, paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. A classicao por um tutor desta natureza proporciona o melhor feedback possvel, crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem. Este tutor ou instrutor: fornece explicaes claras acerca do que ele espera, e do estilo de classicao que ir utilizar;

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

gosta que lhe faam perguntas adicionais; identica as nossas falhas, mas corrige-as amavelmente, diz um estudante, e explica porque motivo a classicao foi ou no foi atribuda; tece comentrios completos e construtivos, mas de forma agradvel (em contraste com um reparo de um estudante: os comentrios deixam-nos com uma sensao de crtica, de ameaa e de nervossismo) d uma ajuda complementar para encorajar um estudante em diculdade; esclarece pontos que no foram entendidos, ou corretamente aprendidos anteriormente; ajuda o estudante a alcanar os seus objetivos; exvel quando necessrio; mostra um interesse genuno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); escreve todas as correes de forma legvel e com um nvel de pormenorizao adequado; acima de tudo, devolve os trabalhos rapidamente;

10

Parte III

MySQL

11

Captulo 1

O que o Mysql
O Programa MySQL um sistema de gerenciamento de banco de dados relacionais baseado em comandos SQL (Structured Query Language - Linguagem Estruturada para Pesquisas) que vem ganhando grande popularidade sendo atualmente um dos bancos de dados mais populares, com mais de 4 milhes de instalaes.

12

Captulo 2

Plano de ensino
2.1 Objetivo
Qualicar tcnicos e programadores no SGBD MySQL.

2.2 Pblico Alvo


Tcnicos e Programadores que desejam trabalhar com MySQL.

2.3 Pr-requisitos
Os usurios devero ser, necessariamente, indicados por empresas pblicas e ter conhecimento bsico acerca da lgica de programao.

2.4 Descrio
O curso de Banco de Dados MySQL ser realizado na modalidade EAD e utilizar a plataforma Moodle como ferramenta de aprendizagem. Ele composto de cinco Modulos. O material didtico estar disponvel on-line de acordo com as datas pr-estabelecidas no calendrio. A verso utilizada para o MySQL ser a 5.0. O curso est dividido da seguinte maneira:

13

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Durao 1 semana

2 semana

Descrio do Mdulo Lio 1 - O que o MySQL Lio 2 - Instalando o MySQL Lio 3 - Aplicabilidade e uso Lio 4 - Criando e selecionando um banco de dados Lio 5 - Criando e manipulando tabelas Lio 6 - Consultando uma tabela Lio 7 - Clusula ORDER BY Lio 8 - Funes pr-denidas Lio 9 - Conectando e desconectando do Servidor Lio 10 - Adicionando novos usurios ao MySQL Lio 11 - Ferramentas grcas de administrao Lio 12 - Stored procedures e funes

Todo o material est no formato de lies, e estar disponvel ao longo do curso. As lies podero ser acessadas quantas vezes forem necessrias. Aconselhamos a leitura de "Ambientao do Moodle", para que voc conhea o produto de Ensino a Distncia, evitando diculdades advindas do "desconhecimento"sobre o mesmo. Ao nal de cada semana do curso ser disponibilizada a prova referente ao mdulo estudado anteriormente que tambm conter perguntas sobre os textos indicados. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova. Os instrutores estaro a sua disposio ao longo de todo curso. Qualquer dvida deve ser disponibilizada no frum ou enviada por e-mail. Diariamente os monitores daro respostas e esclarecimentos.

2.5 Metodologia
O curso est dividido da seguinte maneira:

2.6 Cronograma
Lio 1 - O que o MySQL Lio 2 - Instalando o MySQL Lio 3 - Aplicabilidade e uso Lio 4 - Criando e selecionando um banco de dados Lio 5 - Criando e manipulando tabelas Lio 6 - Consultando uma tabela Lio 7 - Clusula ORDER BY Lio 8 - Funes pr-denidas Lio 9 - Conectando e desconectando do Servidor Lio 10 - Adicionando novos usurios ao MySQL 14

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Lio 11 - Ferramentas grcas de administrao Lio 12 - Stored procedures e funes Avaliao de aprendizagem Avaliao do curso As lies contm o contudo principal. Elas podero ser acessadas quantas vezes forem necessrias, desde que esteja dentro da semana programada. Ao nal de uma lio, voc receber uma nota de acordo com o seu desempenho. Responda com ateno s perguntas de cada lio, pois elas sero consideradas na sua nota nal. Caso sua nota numa determinada lio for menor do que 6.0, sugerimos que voc faa novamente esta lio. Ao nal do curso ser disponibilizada a avaliao referente ao curso. Tanto as notas das lies quanto a da avaliao sero consideradas para a nota nal. Todos os mdulos caro visveis para que possam ser consultados durante a avaliao nal. Aconselhamos a leitura da "Ambientao do Moodle"para que voc conhea a plataforma de Ensino a Distncia, evitando diculdades advindas do "desconhecimento"sobre a mesma. Os instrutores estaro a sua disposio ao longo de todo curso. Qualquer dvida dever ser enviada no frum. Diariamente os monitores daro respostas e esclarecimentos.

2.7 Programa
O curso de Mysql oferecer o seguinte contedo: O que o MySQL Instalando o MySQL Aplicabilidade e uso Criando e selecionando um banco de dados Criando e manipulando tabelas Consultando uma tabela Clusula ORDER BY Funes pr-denidas Conectando e desconectando do Servidor Adicionando novos usurios ao MySQL Ferramentas grcas de administrao Stored procedures e funes

15

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

2.8 Avaliao
Toda a avaliao ser feita on-line. Aspectos a serem considerados na avaliao: Iniciativa e autonomia no processo de aprendizagem e de produo de conhecimento; Capacidade de pesquisa e abordagem criativa na soluo dos problemas apresentados. Instrumentos de avaliao: Participao ativa nas atividades programadas. Avaliao ao nal do curso. O participante far vrias avaliaes referente ao contedo do curso. Para a aprovao e obteno do certicado o participante dever obter nota nal maior ou igual a 6.0 de acordo com a frmula abaixo: Nota Final = ((ML x 7) + (AF x 3)) / 10 = Mdia aritmtica das lies AF = Avaliaes

2.9 Bibliograa
Site ofcial: www.mysql.org Guia em Portugus: http://dev.mysql.com/doc/

16

Captulo 3

Mysql
3.1 Viso Geral

O Programa MySQL um sistema de gerenciamento de banco de dados relacionais baseado em comandos SQL (Structured Query Language - Linguagem Estruturada para Pesquisas) que vem ganhando grande popularidade sendo atualmente um dos bancos de dados mais populares, com mais de 4 milhes de instalaes.

3.2 Banco de Dados


3.2.1 Conceitos Fundamentais sobre Banco de Dados
Caso voc no tenha tido contato com banco de dados anteriormente, de fundamental importncia a leitura deste livro. Os assuntos abordados vo desde os conceitos sobre banco de dados at normalizao. Conceitos importantes para compreenso de relacionamentos, como chaves, tambm so abordados.

17

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.2.2 Introduo ao Banco de Dados


O que um Banco de Dados Um Banco de Dados um recurso para a manipulao eciente de um grande conjunto de informaes estruturadas e armazenadas de forma organizada e integrada. Imagine se fosse necessrio encontrar o telefone de determinada pessoa, e que, para isso, no existisse a lista telefnica. Seria muito difcil encontrar o telefone. A lista telefnica, portanto, um banco de dados onde esto relacionados os nomes e os telefones das pessoas. Outros exemplos de banco de dados so: * Lista com acervo de uma biblioteca; * Lista de preos de uma farmcia; * Lista de funcionrios de uma empresa;

SGBD Um Sistema Gerenciador de Banco de Dados, o conjunto de programas (softwares) que compe a camada responsvel pelo armazenamento, e recuperao dos dados no Sistema de Informao. O objetivo principal retirar da camada da Aplicao a responsabilidade dessas tarefas provendo um ambiente mais seguro, mais fcil de manter-se e mais convel. A interface entre essas duas camadas a uma linguagem padro para consulta, manipulao e controle de acesso aos dados. Atualmente a linguagem mais utilizada para essa interface o SQL - Structured Query Language. Exemplos: * Oracle * Postgre * MySQL

Vantagens de um SGBD: * Rapidez na manipulao e no acesso informao. * Controle integrado de informaes distribudas sicamente. * Reduo de redundncia e de inconsistncia de informaes. * Compartilhamento de dados. * Segurana dos dados. * Reduo de problemas de integridade.

Tabelas Armazena um conjunto de informaes referentes a um determinado assunto. ( Conjunto de Linhas e Colunas ) 18

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Exemplos:

Linha (Tupla) o elemento do conjunto de uma entidade (Tabela). Cada linha de um Banco de Dados, formada por um conjunto de colunas, representa um registro (ou tupla). Os registros no precisam necessariamente conter dados em todas as colunas, os seus valores podem ser nulos. Exemplos:

19

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Coluna So dados elementares que descrevem a entidade. um elemento de uma tupla. Exemplos:

3.2.3 Modelo Entidade Relacionamento


Modelo de Dados Modelo de Dados uma imagem grca de toda a base de informaes necessrias para um determinado empreendimento.

Modelo Relacional O Modelo de Dados relacional representa os dados contidos em um Banco de Dados atravs de relaes. Estas relaes contm informaes sobre as entidades representadas e seus relacionamentos. Modelos Entidade Relacionamento a principal ferramenta grca para representao do Modelo de Dados e foi proposto por Peter Chain. Tem a nalidade de identicar entidades de dados e seus relacionamentos. Exemplos: 20

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Entidade Conjunto de informaes referentes a um determinado assunto. Exemplos:

21

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Atributos Representam as caractersticas de uma Entidade. Tipos de Atributos: Determinante: seu valor representa um elemento da entidade. seu valor nico para a entidade. deve ser sublinhado. Composto: necessita ser dividido em sub-atributos, para que seu signicado seja melhor compreendido. Multi-valorado: pode assumir mais do que um valor para cada entidade, diferenciado com um (*).

Recomendaes para criao de um DER Recomendaes para criao de um DER((Diagrama Entidade - Relacionamento). 1. Antes de comear a modelar, conhea o "mundo real". 2. Identique quais so as ENTIDADES. 3. Para cada Entidade represente seus ATRIBUTOS. 4. Confronte cada Entidade consigo mesma e com as demais na procura de possveis RELACIONAMENTOS 5. Verique a existncia de ATRIBUTOS DE RELACIONAMENTO. 6. Para relacionamentos mltiplos estude a necessidade de AGREGAES. 7. Desenhe o DER, com todas as Entidades, Atributos, Relacionamentos, Classes e Restries de Totalidade. 8. Analise cuidadosamente todas as restries que voc imps. 9. At que voc e os seus usurios estejam convencidos de que o DER reete elmente o "mundo real", volte ao item 1.

3.2.4 Tipos de Relacionamento


Relacionamentos So vnculos ou associaes entre entidades Exemplo:

22

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Geralmente, a chave um dos campos de um registro. O conceito de chave est tambm intimamente relacionado aos conceitos de ndices e tabelas. Existem vrios tipos de chave, por exemplo: * Uma chave dita nica se ela identica, de forma inequvoca, um determinado item armazenado no repositrio. Uma chave no-nica, ou ambgua, identica mais de um item dentro do repositrio. * Uma chave primria uma chave nica, utilizada como referncia preferencial para identicar um item dentro de um repositrio. Por exemplo, o nome de um usurio de um sistema informatizado, ou o nmero de registro de um carro, podem ser utilizados como chaves primrias para localizar os respectivos itens. * Uma chave estrangeira uma chave armazenada em um determinado repositrio, que permite localizar informaes contidas em outros repositrios. um atributo ou conjunto de atributos de uma entidade que chave primria em outra entidade * Uma chave simples associada a um nico valor, ou campo, do registro. Uma chave composta corresponde ao valor agregado de vrios campos, e pode ser necessria para eliminar a ambiguidade, formando um identicador nico. Tipos de Classes (Cardinalidades) 1:1 Em Bases de Dados relacionais, 1 para 1, one to one (um para um ou 1:1) um dos tipos de relacionamentos que se podem estabelecer entre os campos de duas tabelas. Assim, para cada valor do campo de uma tabela, pode haver um valor no campo da outra tabela e vice-versa.

23

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

1:N Em Bases de Dados relacionais, One to Many, um para muitos, 1 para N ou 1:N um dos tipos de relacionamentos que se podem estabelecer entre os campos de duas tabelas, em que para cada valor do campo de uma tabela, pode haver N valores no campo da outra tabela. Exemplos: Um colgio pode ter vrias turmas, mas a cada turma corresponde apenas um colgio.

24

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

N:N Em Bases de Dados relacionais, N para N, Many to Many (muitos para muitos ou N:N) um dos tipos de relacionamentos que se podem estabelecer entre os campos de duas tabelas. Assim, para cada valor do campo de uma tabela, pode haver N valores no campo da outra tabela e viceversa. Em bancos de dados relacionais, isto normalmente feito atravs de uma tabela de ligao. Ela se liga a cada lado N, com relacionamento 1 para N em cada lado. Cada possibilidade de ligao registrada isoladamente, ou seja, ao relacionar cinco informaes de cada lado, so registradas 25 linhas na tabela de ligao. A chave primria desta tabela criada pela juno dos campos chaves das tabelas interligadas. Exemplos: Um pedido de compra pode ter vrias mercadorias, e um tipo de mercadoria pode ser listada em vrios pedidos.

25

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.2.5 Normalizao
Conceito de Normalizao Consiste em denir o formato lgico adequado para as estruturas de dados identicados no projeto lgico do sistema, com o objetivo de evitar redundncia e garantir a integridade e conabilidade das informaes. A normalizao feita, atravs da anlise dos dados que compem as estruturas utilizando o conceito chamado Formas normais(FN). As FN so conjuntos de restries nos quais os dados devem ser submetidos. PRIMEIRA FORMA NORMAL: UMA RELAO EST NA 1FN SE NO TEM GRUPOS DE ATRIBUTOS OU ATRIBUTOS REPETITIVOS. Exemplos: Aluno (Matricula, Nome, Curso) A entidade possui um atributo repetitivo, pois, se o aluno zer mais de um curso ser necessrio cadastrar os dados Matricula e Nome novamente. Fatura (nfat, cod-cliente, nome-cliente, morada-cliente, cod-prod, descrio-prod, preo, quantidade) A relao Fatura no se encontra na 1FN porque os atributos cod-prod, descrio-prod, preo e quantidade constituem um grupo repetitivo, ou seja, sempre que na mesma Fatura, existe informao referente a um novo produto imprescindvel repetir o nfat, cod-cliente, nome-cliente, morada-cliente. Passagem para a 1FN: * Separar a relao Fatura em duas relaes, Fatura e Linha-Fatura; * Fatura (cod-fat, cod-cliente, nome-cliente, morada-cliente); * Linha-Fatura (cod-fat, cod-prod, descrio-prod, preo, quantidade) SEGUNDA FORMA NORMAL: UMA RELAO EST NA 2FN SE EST NA 1FN E SE TODOS OS ATRIBUTOS NO CHAVE DEPENDEM DA TOTALIDADE DA CHAVE. Exemplos: * Fatura (cod-fat, cod-cliente, nome-cliente, morada-cliente) * Linha-Fatura (cod-fat, cod-prod, descrio-prod, preo, quantidade) A relao Linha-Fatura no se encontra na 2FN porque os atributos descrio-prod e preo no dependem de cod-fat, cod-prod mas s de cod-prod. Passagem para a 2FN: 26

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Separar a relao Linha-Fatura em duas relaes, Linha-Fatura e Produto. * Fatura (cod-fat, cod-cliente, nome-cliente, morada-cliente) * Linha - Fatura (cod-fat, cod-prod, quantidade) * Produto (cod-prod, descrio-prod, preo) TERCEIRA FORMA NORMAL: UMA RELAO EST NA 3FN SE EST NA 2FN E, TODOS OS SEUS ATRIBUTOS NO CHAVE NO SO IDENTIFICADOS POR UM OUTRO TAMBM NO CHAVE. Exemplo: * Fatura (cod-fat, cod-cliente, nome-cliente, morada-cliente) * Linha - Fatura (cod-fat, cod-prod, quantidade) * Produto (cod-prod, descrio-prod, preo) A relao Fatura no se encontra na 3FN porque os atributos nome-cliente e morada-cliente so identicados por cod-cliente e no por cod-fat. Passagem para a 3FN: Separar a relao Fatura em duas relaes, Fatura e Cliente. * Fatura (cod-fact, cod-cliente ) * Cliente (cod-cliente, nome-cliente, morada-cliente ) * Linha - Fatura (cod-fat, cod-prod, quantidade) * Produto (cod-prod, descrio-prod, preo )

3.3 Lio 1 - O que o MySQL?


3.3.1 Introduo
O MySQL, um dos mais populares sistemas de gerenciamento de banco de dados SQL Open Source, desenvolvido, distribudo e tem suporte da MySQL AB. A MySQL AB uma empresa comercial, fundada pelos desenvolvedores do MySQL, cujos negcios fornecer servios relacionados ao sistema de gerenciamento de banco de dados MySQL. Um banco de dados uma coleo de dados estruturados. Ele pode ser qualquer coisa desde uma simples lista de compras a uma galeria de imagens ou a grande quantidade de informao da sua rede coorporativa. Para adicionar, acessar, e processar dados armazenados em um banco de dados de um computador, voc necessita de um sistema de gerenciamento de bancos de dados como o Servidor MySQL. Como os computadores so muito bons em lidar com grandes quantidades de dados, o gerenciamento de bancos de dados funciona como a engrenagem central na computao, seja como utilitrios independentes ou como partes de outras aplicaes. O MySQL um sistema de gerenciamento de bancos de dados relacional. Um banco de dados relacional armazena dados em tabelas separadas em vez de colocar todos os dados um s local. Isso proporciona velocidade e exibilidade. A parte SQL do "MySQL atenta pela "Structured Query Language - Linguagem Estrutural de Consultas. SQL a linguagem padro mais 27

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

comum usada para acessar banco de dados e denida pelo Padro ANSI/ISO SQL. O padro SQL est vem evoluindo desde 1986 e existem diversas verses. O MySQL um software Open Source. Open Source signica que possvel para qualquer um usar e modicar o programa. Qualquer pessoa pode fazer download do MySQL pela Internet e us-lo sem pagar nada. Se voc quiser, voc pode estudar o cdigo fonte e alter-lo para adequ-lo s suas necessidades. O MySQL usa a GPL (GNU General Public License - Licena Pblica Geral GNU) , para denir o que voc pode e no pode fazer com o software em diferentes situaes. Se voc sentir desconforto com a GPL ou precisar embutir o MySQL em uma aplicao comercial, voc pode adquirir a verso comercial licenciada com a MySQL AB.

3.3.2 As Prinipais caractersticas do MySQL


A seguinte lista descreve algumas das caractersticas mais importantes do Programa de Banco de Dados MySQL. * Portabilidade. * Escrito em C e C++. * Testado com uma ampla faixa de compiladores diferentes. * Funciona em diversas plataformas. * Utiliza o GNU Automake, Autoconf, e Libtool para portabilidade. * APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby e Tcl esto disponveis. * Suporte total a multi-threads usando threads diretamente no kernel. Isto signica que se pode facilmente usar mltiplas CPUs, se disponvel. * Fornece mecanismos de armazenamento transacional e no transacional. * Tabelas em disco (MyISAM) baseadas em rvores-B extremamente rpidas com compresso de ndices. * relativamente fcil se adicionar outro mecanismo de armazenamento. Isto til se voc quiser adicionar uma interface SQL a um banco de dados caseiro. * Um sistema de alocao de memria muito rpido e baseado em processo (thread). * Joins muito rpidas usando uma multi-join de leitura nica otimizada. * Tabelas hash em memria que so usadas como tabelas temporrias. * Funes SQL so implementadas por meio de uma biblioteca de classes altamente otimizada e com o mximo de performance. Geralmente no h nenhuma alocao de memria depois da inicializao da pesquisa. * O cdigo do MySQL foi testado com Purify (um detector comercial de falhas de memria) e tambm com o Valgrind, uma ferramenta GPL. * Disponvel como verso cliente/servidor ou embutida (ligada). * Aceita diversos tipos de campos: tipos inteiros de 1, 2, 3, 4 e 8 bytes com e sem sinal, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET e ENUM. * Registros de tamanhos xos ou variveis. * Completo suporte a operadores e funes nas partes SELECT e WHERE das consultas. Por exemplo: mysql> SELECT CONCAT(rst_name, " ", last_name) -> FROM nome_tbl -> WHERE income/dependents > 10000 AND age > 30; 28

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* Suporte pleno s clusulas SQL GROUP BY e ORDER BY. Suporte para funes de agrupamento (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX() e MIN()). * Suporte para LEFT OUTER JOIN e RIGHT OUTER JOIN com as sintaxes SQL e ODBC. * Alias em tabelas e colunas so disponveis como denidos no padro SQL92. * DELETE, INSERT, REPLACE, e UPDATE retornam o nmero de linhas que foram alteradas (afetadas). possvel retornar o nmero de linhas com padro coincidentes congurando um parmetro quando estiver conectando ao servidor. * O comando especco do MySQL, SHOW, pode ser usado para devolver informaes sobre bancos de dados, tabelas e ndices. O comando EXPLAIN pode ser usado para determinar como o otimizador resolve a consulta. * Nomes de funes no conitam com nomes de tabelas ou colunas. Por exemplo, ABS um nome de campo vlido. A nica restrio que para uma chamada de funo, espaos no so permitidos entre o nome da funo e o "("que o segue. * Voc pode misturar tabelas de bancos de dados diferentes na mesma pesquisa. * Um sistema de privilgios e senhas que muito exvel, seguro e que permite vericao baseada em estaes/mquinas. Senhas so seguras porque todo o trco de senhas criptografado quando voc se conecta ao servidor. * Lida com bancos de dados enormes. Usamos o Servidor MySQL com bancos de dados que contm 50.000.000 registros e sabemos de usurios que usam o Servidor MySQL com 60.000 tabelas e aproximadamente 5.000.000.000 de linhas. * So permitidos at 32 ndices por tabela. Cada ndice pode ser composto de 1 a 16 colunas ou partes de colunas. O tamanho mximo do ndice de 500 bytes (isto pode ser alterado na compilao do MySQL). Um ndice pode usar o prexo de campo com um tipo CHAR ou VARCHAR. * Os clientes podem se conectar ao servidor MySQL usando sockets TCP/IP, em qualquer plataforma. No sistema Windows na famlia NT (NT, 2000 ou XP), os clientes podem se conectar usando named pipes. No sistema Unix, os clientes podem se conectar usando arquivos sockets. * A interface Connector/ODBC fornece ao MySQL suporte a programas clientes que usam conexo ODBC (Open-DataBase-Connectivity). Por exemplo, voc pode usar o MS Access para conectar ao seu servidor MySQL. Os clientes podem ser executados no Windows ou Unix. O fonte do Connector/ODBC est disponvel. Todas as funes ODBC so suportadas, assim como muitas outras. * O servidor pode apresentar mensagem de erros aos clientes em vrias lnguas. * Suporte total para vrios conjuntos de caracteres, que incluem ISO-8859-1 (Latin1), big5, ujis e mais. Por exemplo, os caracteres Escandinavos "", "", ""so permitidos em nomes de tabelas e colunas. * Todos os dados so armazenados no conjunto de caracteres escolhido. Todas as comparaes em colunas de seqncias caso-insensitivo. * A ordenao feita de acordo com o conjunto de caracteres escolhido (o modo sueco por padro). possvel alterar isso quando o servidor MySQL iniciado. Para ver um exemplo de vrias ordenaes avanadas, procure pelo cdigo de ordenao Tcheca. O Servidor MySQL suporta diversos conjuntos de caracteres que podem ser especicados em tempo de compilao e execuo. * O servidor MySQL foi construdo com suporte para instrues SQL que vericam, otimizam e reparam tabelas. Estas instrues esto disponveis a partir da linha de comando por meio do cliente myisamcheck, O MySQL inclui tambm o myisamchk, um utilitrio muito rpido para realizar estas operaes em tabelas MyISAM. 29

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* Todos os programas MySQL podem ser chamados com as opes help ou -? para obter ajuda online.

3.4 Lio 2 - Instalando o MySQL


3.4.1 Instalando o MySQL no Debian - 1
APT - Utilitrio de empacotamento No incio havia o .tar.gz. Os usurios tinham de penar para compilar cada programa usado em seu sistema GNU/Linux, ou outro qualquer. Quando o Debian foi criado, sentiu-se a necessidade de um sistema de gerenciamento de pacotes instalados no sistema. Deu-se a esse sistema o nome de dpkg. Assim surgiu o famoso "pacote". Logo aps a Red Hat resolveu criar seu conhecido sistema rpm. Rapidamente outro dilema tomou conta das mentes dos produtores de GNU/Linux. Uma maneira rpida, prtica e eciente de se instalar pacotes, gerenciando suas dependncias automaticamente e tomando conta de seus arquivos de congurao ao atualizar. Assim, o Debian, novamente pioneiro, criou o APT ou Advanced Packaging Tool.

3.4.2 Instalando o MySQL no Debian - 2


A distribuio Debian possui uma ferramenta chamada "apt"utilizada para instalar softwares. Essa ferramenta de grande importncia durante nosso processo de instalao, pois ela gerenciar todo o processo. No diretrio /etc/apt existe um arquivo chamado "sources.list"com a funo de armazenar os endereos dos repositrios com os pacotes de instalao. Vejamos um exemplo deste arquivo. #deb le:///cdrom/ sarge main deb http://ftp.br.debian.org/debian/ stable main deb-src http://ftp.br.debian.org/debian/ stable main deb http://security.debian.org/ stable/updates main deb http://ftp.br.debian.org/debian/ testing main contrib non-free deb-src http://ftp.br.debian.org/debian/ testing main contrib non-free deb ftp://ftp.nerim.net/debian-marillat/ testing main

A primeira linha esta comentada, isso se d pela utilizao do caracter #. Caso no estivesse comentada poderiamos instalar softwares diretamente dos cds de instalao. As demais linhas so endereos para repositrios que esto na internet. O pacote com os arquivos do MySQL pode ser encontrado no endereo "deb http://ftp.br.debian.org/debian/ stable main"porm no ser a ultima verso do MySQL. Instalaremos a ultima verso do MySQL, e para isso ser necessario o repositrio "deb ftp://ftp.nerim.net/debia marillat/ testing main", porm pode ser utilizado outros que tambm possuam a ultima verso do MySQL. 30

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.4.3 Instalando o MySQL no Debian - 3


Instalando o MySQL no Debian Depois de vericado o "sources.list", vamos para instalao. Para verciar se os pacotes esto realmente disposio utilizamos o seguinte comando: shell> apt-cache search mysql-server A sada ser semelhante a esta: mysql-server - empty transitional package mysql-server-4.1 - empty transitional package mysql-server-5.0 - mysql database server binaries phpbb2-conf-mysql - Automatic congurator for phpbb2 on MySQL database scoop - Web-based collaborative media application webmin-mysql - mysql-server control module for webmin

A utlima verso do MySQL-server neste exemplo a 5.0 . Agora para instalar basta digitarmos o camando: shell> apt-get install mysql-server-5.0 A sada ser semelhante a esta: Lendo Lista de Pacotes... Pronto Construindo rvore de Dependncias... Pronto Os pacotes extra a seguir sero instalados: gcc-4.0-base libdbd-mysql-perl libdbi-perl libgcc1 libmysqlclient15 libncurses5 libnet-daemon- erl libplrpc-perl libreadline4 libreadline5 libstdc++6 mysql-client-5.0 mysql-common readline-common Pacotes sugeridos : dbishell libcompress-zlib-perl Os NOVOS pacotes a seguir sero instalados: gcc-4.0-base libdbd-mysql-perl libdbi-perl libmysqlclient15 libnet-daemon-perl libplrpc-perl libstdc++6 mysql-client-5.0 mysql-common mysql-server-5.0 readline-common Os pacotes a seguir sero atualizados : libgcc1 libncurses5 libreadline4 libreadline5 4 pacotes atualizados, 11 pacotes novos instalados, 0 a serem removidos e 712 no atualizados. preciso fazer o download de 26,9MB de arquivos. Depois de desempacotamento, 59,4MB adicionais de espao em disco sero usados. Quer continuar? [S/n] Digite S para que os pacotes sejam recebidos. 31

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Uma tela de congurao apareer, bastando continuar. Pronto, seu Banco de Dados esta pronto para ser utilizado!

3.4.4 Instalando a partir dos fontes - 1


Instalando a partir dos fontes Para instalar o MySQL a partir de seu cdigo fonte voc precisar das seguintes ferramentas: * GNU gunzip para descompactar a distribuio. * Um tar razovel para desempacotar a distribuio. Por exemplo o GNU tar. * Um compilador ANSI C++ funcional. gcc >= 2.95.2, egcs >= 1.0.2 ou egcs 2.91.66, SGI C++, e SunPro C++ so alguns dos compiladores que funcionam. * Um bom programa make. GNU make sempre recomendado e algumas vezes necessrio. Se voc tiver problemas, recomendamos tentar o GNU make 3.75 ou mais novo.

3.4.5 Instalando a partir dos fontes -2


Viso Detalhada da Instalao

1. Baixe o arquivo com o cdigo fonte do MySQL em http://dev.mysql.com/get/Downloads/MySQL5.0/mysql-5.0.22.tar.gz/from/http://www.linorg.usp.br/mysql/ Este um servidor brasileiro. Caso haja algum problema acessem http://dev.mysql.com/downloads/mysql/5.0. 2. Acesse o terminal e escolha um diretrio para descompacatar o arquivo tar.gz baixado. 3. Distribuies fontes do MySQL so fornecidas como arquivos tar compactados e tem nomes como mysql-verso.tar.gz. Dentro do diretrio escolhido para instalao digite o comando: * tar xvzf mysql-verso.tar.gz

4. Adicione um usurio e grupo para o mysql executar assim: * groupadd mysql * useradd -g mysql mysql Useradd e groupadd podem mudar em diferentes verses de Unix. Elas podem tambm ser chamadas adduser e addgroup. Voc pode escolher outros nomes para o usurio e grupo em vez de mysql. 6. Acesse o diretrio onde o arquivo foi descompactado: * cd diretorio

7. Congure e compile tudo: 32

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* ./congure prex=/usr/local/mysql * make Obs: prex indicar o diretrio onde os arquivos binrios caro armazenados. Neste ponto o mysql j est operacional, porm no est instalado no diretrio padro do sistema. 8. Instalar tudo: * make install Voc deve executar este comando como root. 9. Crie as tabelas de permisses do MySQL. * bin/mysql_install_db

10. Altere o dono dos binrios para root e do diretrio de dados para o usurio que ir executar o mysqld: * chown -R root /usr/local/mysql * chown -R mysql /usr/local/mysql/var * chgrp -R mysql /usr/local/mysql O primeiro comando altera o atributo de proriedade dos arquivos para o usurio root, o segundo altera o atributo de propriedade do diretrio de dados para o usurio mysql, e o terceiro altera o atributo de grupo para o grupo mysql. 11. Inicie o servidor MySQL com o seguinte comando: * /usr/local/mysql/bin/mysqld_safe user=mysql &

3.4.6 Congurao / Testes


Depois de instalado o mysql, necessrio criar as tabelas de concesses e iniciar o servidor. No terminal, digite os seguintes comandos: * shell> diretorio_instalao/bin/mysql_install_db * shell> cd diretorio_instalao_mysql * shell> diretorio_instalao/bin/mysqld_safe user=mysql &

O script mysql_install_db cria os bancos mysql, test e as entradas de previlgio para o usurio que utiliza o script e para o usurio root. O banco de dados mysql ir armazenar todos os previlgios dos outros bancos de dados e o banco test ser utilizado para testar o MySQL. O mysql_install_db no ir sobrescrever nenhuma tabela de privilgios antiga, ento deve ser seguro execut-lo em quaisquer circunstncias. 33

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

O script mysqld_safe inicia o mysqld, daemon do mysql. O daemon um programa que roda em um computador servidor, atendendo solicitaes de outros programas, executando determinadas tarefas e retornando uma resposta adequada. De agora em diante utilizaremos BINDIR para representar o caminho para a localizao na qual os programas como mysqladmin e mysqld_safe esto instalados. Caso voc esteja utilizando o Debian, o diretrio com os binrios provavelmente esto localizados em /usr/bin. Caso voc tenha instalado o MySQL a partir do cdigo fonte, este diretrio foi indicado na etapa de congurao. Com o mysqladmin podemos realizar uma gama de testes para vericar se o mysql est em perfeito funcionamento. Execute o comando abaixo para vericar se o servidor est em funcionamento e respondendo s conexes: * shell> BINDIR/mysqladmin version A sada de mysqladmin version deve ser algo parecido com o indicado abaixo: ./mysqladmin Ver 8.41 Distrib 5.0.22, for pc-linux-gnu on i686 Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version 5.0.22 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /tmp/mysql.sock Uptime: 42 sec Threads: 1 Questions: 2 Slow queries: 0 Opens: 0 Flush tables: 1 Open tables: 6 Queries per second avg: 0.048 Verique se voc pode desligar o servidor: * shell> BINDIR/mysqladmin -u root shutdown

Execute os testes abaixo para vericar se o servidor est funcionando corretamente. Os comandos devem retornar algo parecido com o mostrado abaixo. Caso isto no acontea, provavelmente as tabelas de concesso no foram criadas e o servidor no foi iniciado. * shell> BINDIR/mysqlshow ++ | Databases | ++ | information_schema | | mysql | | test | 34

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

++ * shell> BINDIR/mysqlshow mysql ++ | Tables | ++ | columns_priv | | db | | func | | help_category | | help_keyword | | help_relation | | help_topic | | host | | proc | | procs_priv | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | ++ * shell> BINDIR/mysql -e "SELECT host,db,user FROM db"mysql ++++ | host | db | user | ++++ | % | test | | | % | test_% | | ++++

3.5 Lio 3 - Aplicabilidade e Uso


3.5.1 Um pouco da histria do SQL
Structured Query Language, ou Linguagem de Questes Estruturadas ou SQL, uma linguagem de pesquisa declarativa para banco de dados relacional (bases de dados relacionais). Muitas das caractersticas originais do SQL foram inspiradas no clculo de tuplos. Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vrios "dialetos"desenvolvidos por outros produtores. Essa expanso levou necessidade de ser criado e adaptado um padro para a linguagem. Esta tarefa foi realizada pela American National Stan-

35

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

dards Institute (ANSI) em 1986 e ISO em 1987. O SQL foi revisto em 1992 e a esta verso foi dado o nome de SQL-92. Foi revisto novamente em 1999 e 2003 para se tornar SQL:1999 (SQL3) e SQL:2003, respectivamente. O SQL:1999 usa expresses regulares de emparelhamento, queries recursivas e gatilhos (triggers). Tambm foi feita uma adio controversa de tipos no-escalados e algumas caractersticas de orientao a objeto. O SQL:2003 introduz caractersticas relacionadas ao XML, sequncias padronizadas e colunas com valores de auto-generalizao (inclusive colunas-identidade). Tal como dito anteriormente, o SQL, embora padronizado pela ANSI e ISO, possui muitas variaes e extenses produzidos pelos diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de plataforma para plataforma sem mudanas estruturais principais. Outra aproximao permitir para cdigo de idioma processual ser embutido e interagir com o banco de dados. Por exemplo, o Oracle e outros incluem Java na base de dados, enquanto o PostgreSQL permite que funes sejam escritas em Perl, Tcl, ou C, entre outras linguagens.

3.5.2 Aplicabilidade e uso


A linguagem SQL bsicamente uma linguagem de consulta a banco de dados. Ela bem diferente das linguagens comuns de programao, a principal diferena que a linguagem SQL no uma linguagem procedural, ao contrrio da grande maioria das linguagens de programao. Na linguagem SQL no se especica como, ou em que ordem, sero executados os processos que iro fornecer os resultados requeridos, na SQL, ns apenas informamos o que queremos e o sistema de banco de dados o responsvel por escolher adequadamente os procedimentos a serem executados, de forma que os resultados sejam obtidos com a maior ecincia possvel. A linguagem SQL uma linguagem relacional, isto , ela ideal para o tratamento de dados relacionados. De uma forma grotesca, dados relacionados so aqueles que podem ser arranjados em uma tabela, onde cada linha forma uma unidade lgica de dados.

3.5.3 Tipos de Comandos


DML - Linguagem de Manipulao de Dados Primeiro h os elementos da DML (Data Manipulation Language - Linguagem de Manipulao de Dados). A DML um subconjunto da linguagem usada para selecionar, inserir, atualizar e apagar dados. SELECT o comumente mais usado do DML, comanda e permite ao usurio especicar uma query como uma descrio do resultado desejado. A questo no especica como os resultados deveriam ser localizados. *INSERT usada para somar uma la (formalmente uma tupla) a uma tabela existente. *UPDATE para mudar os valores de dados em uma la de tabela existente.

36

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

*DELETE permite remover las existentes de uma tabela. *BEGIN WORK (ou START TRANSACTION, dependendo do dialeto SQL) pode ser usado para marcar o comeo de uma transao de banco de dados que pode ser completada ou no. *COMMIT envia todos os dados das mudanas permanentemente. *ROLLBACK faz com que as mudanas nos dados existentes desde que o ltimo COMMIT ou ROLLBACK sejam descartadas. COMMIT e ROLLBACK interagem com reas de controle como transao e locao. Ambos terminam qualquer transao aberta e liberam qualquer cadeado ligado a dados. Na ausncia de um BEGIN WORK ou uma declarao semelhante, a semntica de SQL dependente da implementao. DDL - Linguagem de Denio de Dados O segundo grupo a DDL (Data Denition Language - Linguagem de Denio de Dados). Uma DDL permite ao usurio denir tabelas novas e elementos associados. A maioria dos bancos de dados de SQL tem extenses proprietrias no DDL. Os comandos bsicos da DDL so: *CREATE cria um objeto (uma Tabela, por exemplo) dentro do base de dados. *DROP apaga um objeto do banco de dados. Alguns sistemas de banco de dados usam o comando ALTER, que permite ao usurio alterar um objeto, por exemplo, adicionando uma coluna a uma tabela existente.

DCL - Linguagem de Controle de Dados O terceiro grupo o DCL (Data Control Language - Linguagem de Controle de Dados). DCL controla os aspectos de autorizao de dados e licenas de usurios para controlar quem tem acesso para ver ou manipular dados dentro do banco de dados. Duas palavras-chaves da DCL: *GRANT - autoriza ao usurio executar ou setar operaes. *REVOKE - remove ou restringe a capacidade de um usurio de executar operaes.

37

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.6 Lio 4 - Criando e selecionando um banco de dados


3.6.1 Comandos de Acesso
Acessando o Servidor MySQL A partir deste momento comearemos a criar banco de dados utilizando o MySQL, para tanto, precisamos logar no servidor. Com o terminal aberto digitamos o seguinte comando: shell> mysql -u root -p Enter password: ******** Conectaremos como root(administrador), pois ainda no existem usurios cadastrados. Quando apareer o campo "Enter password", tecle enter. A senha padro de root vem desabilitada, na prxima seo aprenderemos como troc-la. Agora que voc j sabe como entrar com os comandos, hora de acessar um banco de dados. Suponha que voc seja dono de uma vdeo locadora e que deseja melhorar a organizao de seus lmes. Voc pode fazer isto criando tabelas para armazenar dados referentes aos lmes e, a partir destas tabelas, voc ser capaz de gerar relatrios e fazer buscas rpidas ao acervo disponvvel. O banco de dados "Locadora", apesar de simples, ser de grande utilidade ao dono da lacoradora. Imagine agora empresas que trabalham com uxos gigantescos de informao, como um sistema de gerenciamento de banco de dados de fundamental para a organizao da instituio.

Vericando a existncia de banco de dados Utilize a instruo SHOW para saber quais bancos de dados existem atualmente no servidor: mysql> SHOW DATABASES; ++ | Database | ++ | mysql | | test | | tmp | ++ A lista de bancos de dados provavelmente ser diferente na sua mquina, mas os bancos de dados mysql e test provavelmente estaro entre eles. Utilize a instruo USE para acessar o banco de dados test : mysql> USE test 38

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Database changed A instruo USE pode ser utilizada sem o delimitador ";". Veremos mais a frente que isto no possvel com outros comandos. Outra caracterstica intrnsecas da instruo USE que ela deve ser utilizada em uma nica linha.

3.6.2 Criando e selecionando um banco de dados


Se o administrador criar seu banco de dados quando congurar as suas permisses, voc pode comear a us-lo. Seno, voc mesmo precisa cri-lo: mysql> CREATE DATABASE Locadora; Para excluirmos o banco de dados utilizamos o seguinte comando: mysql> DROP DATABASE Locadora; Este comando tambm serve para excluir tabelas, basta trocarmos DATABASE por TABLE. No Unix, nomes de bancos de dados so caso sensitivo (ao contrrio das palavras chave SQL). Isto quer dizer que Locadora direferente de LOCADORA ou locadora. Criar um bancos de dados no o seleciona para o uso. Faa isto utilizando a instruo use. mysql> USE Locadora Database changed Uma forma alternativa de colocar o banco de dados em uso passando o nome do banco como parmetro durante a inicializao do mysql. shell> mysql -h servidor -u usuario -p Locadora Enter password: ******** Perceba que -h indica o "host"do servidor, ou seja, sua localizao na rede. Caso o servidor esteja na mquina local este parmetro pode ser omitido. -u indica o usurio que acessar o sistema e -p a senha. Ateno, Locadora no o parmetro relativo a senha. Locadora o banco que desejamos colocar em uso. Caso deseje passar a senha na linha de comando voc deve faz-lo sem usar espaos (por exemplo, -pminhasenha e no como em -p minhasenha). Entrentanto, no recomendado colocar a senha na linha de comando, visto que a senha ca exposta a outras pessoas.

39

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.7 Lio 5 - Criando e manipulando Tabelas


3.7.1 Tipos de Tabelas
Antes de criarmos nossa tabela e continuarmos com o exemplo da lio anterior, vamos aprender os tipos de tabelas suportado pelo MySQL se suas caractersticas: No MySQL podemos denir vrios tipos de tabelas, sendo que um banco de dados pode conter diferentes tipos de tabelas. Quando voc cria uma nova tabela, voc pode dizer ao MySQL que tipo de tabela criar. O tipo padro o MyISAM. Abaixo segue um descrio rpida dos tipos de tabelas suportados pelo MySQL: MyISAM: MyISAM o tipo de tabela padro no MySQL. Ela baseada no cdigo ISAM e possui vrias extenses teis. O ndice armazenado em um arquivo com extenso .MYI (MYIndex), e os dados so armazenados em um arquivo com a extenso .MYD (MYData). Voc pode vericar/reparar tabelas MyISAM com o utilitrio myisamchk. Merge: Uma tabela MERGE (tambm conhecida como tabela MRG_MyISAM) uma coleo de tabelas MyISAM idnticas que podem ser usada como uma. Voc s pode fazer SELECT, DELETE, e UPDATE da coleo de tabelas. Se voc zer um DROP na tabela MERGE, voc s est apagando a especicao de MERGE. HEAP: As tabelas HEAP do MySQL utilizam hashing 100% dinmico sem reas em excesso. No h espaos extras necessrios para listas livres. Tabelas HEAP tambm no tm problemas com deleo + insero, o que normalmente comum em tabelas com hash: InnoDB: O InnoDB prove o MySQL com um mecanismo de armazenamento seguro com transaes (compatvel com ACID) com commit, rollback, e recuperao em caso de falhas. InnoDB faz bloqueio a nvel de registro e tambm fornece uma leitura sem bloqueio em SELECT em um estilo consistente com Oracle. Estes recursos aumentam a performance e a concorrncia de multi-usurios. InnoDB o primeiro gerenciador de armazenamento no MySQL que suportam restries FOREIGN KEY. BerkeleyDB ou BDB: disponvel em http://www.sleepycat.com/ tem provido o MySQL com um mecanismo de armazenamento transacional. Tabelas BDB podem ter maior chance de sobrevivncia a falhas e tambm so capazes de realizar operaes COMMIT e ROLLBACK em transaes.

3.7.2 Criando uma tabela


A criao de uma tabela feita com a instruo CREATE TABLE. O MySQL possui uma caracterstica um pouco diferente de outros SGBDs. Durante a criao da tabela podemos denir o tipo desta tabela. Exemplo:

40

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

CREATE TABLE teste ( id INT NOT NULL, texto CHAR(30) NOT NULL, PRIMARY KEY (id) ) TYPE=MyISAM; No comando acima, TYPE=MyISAM, indica que a tabela criada ser do tipo MyISAM, que o valor default caso no seja informado o TYPE. Atravs deste exemplo observamos que a sintaxe do CREATE TABLE muito simples, sendo necessrio apenas informar o nome da tabela, no caso "teste", os campos da tabela e o tipo da tabela, podendo este ltimo ser ocultado. Continuando com o exemplo que viamos seguindo na lio anterior, com a criao do banco de dados "Locadora", o comando SHOW TABLES nos mostrar a as tabelas existentes neste banco de dados. mysql> SHOW TABLES; Empty set (0.00 sec) A parte mais difcil decidir qual a estrutura que seu banco de dados deve ter: quais tabelas voc precisar e que colunas estaro em cada uma delas. Voc ir precisar de uma tabela para guardar os registros de cada um de seus lmes. A tabela poder se chamar "Acervo"e dever conter os campos que identicam os lmes. Campos como nome, gnero, censura e durao. Voc pode usar o banco de dados para tarefas como gerar avisos de atraso de devoluo, ou at mesmo para gerar listas com informaes de todos os clientes da locadora. Logo teramos mais uma tabela com informaes de todos os clientes e esta tabela poderia se relacionar com a tabela Acervo atravs de algum campo. Vejam como podemos modelar uma estrutura organizacional de tal forma que sistemas cada vez mais complexos sejam construdos a partir de base de dados. Voc provavelmente pode pensar em outros tipos de informaes que podero ser teis na tabela Acervo, mas as identicadas at o momento so sucientes por agora: nome, gnero, censura e durao. Utilize a sentea CREATE TABLE para especicar o layout de sua tabela: mysql> CREATE TABLE Acervo(nome VARCHAR(20), gnero VARCHAR(20), censura INT, durao TIME); Query OK, 0 rows affected (0,00 sec) VARCHAR uma boa escolha para os campos nome e gnero porque os valores da coluna so de tamanho varivel. Os tamanhos destas colunas no precisam necessriamente de ser os mesmos e no precisam ser 20. O campo censura bem representando com o tipo inteiro, visto que as idades so dadas em nmeros inteiros. O mesmo acontece com o campo durao, onde TIME um tipo utilizado para armazenar dados no formato HH:MM:SS (Veremos mais a frente todos os tipos de campos). 41

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Agora que voc criou uma tabela, a instruo SHOW TABLES deve produzir alguma sada: mysql> SHOW TABLES; ++ | Tables_in_Locadora | ++ | Acervo | ++ 1 row in set (0,02 sec) Para vericar se sua tabela foi criada da forma que voc esperava, utilize a instruo DESCRIBE: mysql> DESCRIBE Acervo; ++-++++-+ | Field | Type | Null | Key | Default | Extra | ++-++++-+ | nome | varchar(20) | YES | | NULL | | | gnero | varchar(20) | YES | | NULL | | | censura | int(11) | YES | | NULL | | | durao | time | YES | | NULL | | ++-++++-+ 4 rows in set (0,00 sec) Voc pode usar DESCRIBE a qualquer hora, por exemplo, se voc esquecer os nomes das colunas na sua tabela ou de que tipos elas tm.

3.7.3 Tipos de Campos


Para cada campo de cada uma da tabelas, necessrio determinar o tipo de dados que contem, para poder ajustar a estrutura da base de dados, e conseguir um armazenamento com a menor utilizao de espao. Os tipos de dados que pode ter um campo, podem-se agrupar em trs grandes grupos: * Tipos numricos * Tipos de Data * Tipos de Cadeia Tipos numricos: Existem tipos de dados numricos, que se podem dividir em dois grandes grupos, os que esto em vrgula utuante (com decimais) e os que no. * TinyInt: um nmero inteiro com ou sem sinal. Com sinal a margem de valores vlidos desde -128 at 127. Sem sinal, a margem de valores de 0 at 255 42

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* Bit ou Bool: um nmero inteiro que pode ser 0 ou 1. * SmallInt: nmero inteiro com ou sem sinal. Com sinal a margem de valores vlidos desde -32768 at 32767. Sem sinal, a margem de valores de 0 at 65535. * MediumInt: nmero inteiro com ou sem sinal. Com sinal a margem de valores vlidos desde -8.388.608 at 8.388.607. Sem sinal, a margem de valores de 0 at 16777215. * Integer, Int: nmero inteiro com ou sem sinal. Com sinal a margem de valores vlidos desde -2147483648 at 2147483647. Sem sinal, a margem de valores de 0 at 429.496.295 * BigInt: nmero inteiro com ou sem sinal. Com sinal a margem de valores vlidos desde -9.223.372.036.854.775.808 at 9.223.372.036.854.775.807. Sem sinal, a margem de valores de 0 at 18.446.744.073.709.551.615. * Float: nmero pequeno em vrgula utuante de preciso simples. Os valores vlidos vo desde -3.402823466E+38 at -1.175494351E-38,0 ou desde 175494351E-38 at 3.402823466E+38. * xReal, Double: nmero em vrgula utuante de dupla preciso. Os valores permitidos vo desde -1.7976931348623157E+308 at -2.2250738585072014E-308, 0 e desde 2.2250738585072014E308 at 1.7976931348623157E+308 * Decimal, Dec, Numeric: Nmero em vrgula utuante desempacotado. O nmero armazenase como uma cadeia. Tipos de data: Na hora de armazenar datas, o MySQL no verica de uma maneira restrita se uma data vlida ou no. Simplesmente comprova que o ms est compreendido entre 0 e 12 e que o dia est compreendido entre 0 e 31. * Date: tipo data, armazena uma data. A margem de valores vai desde o 1 de Janeiro de 1001 ao 31 de dezembro de 9999. O formato de armazenamento de ano-mes-dia. * DateTime: Combinao de data e hora. A margem de valores vai desde o 1 de Janeiro de 1001 s 0 horas, 0 minutos e 0 segundos ao 31 de Dezembro de 9999 s 23 horas, 59 minutos e 59 segundos. O formato de armazenamento de ano-mes-dia horas:minutos:segundos. * TimeStamp: Combinao de data e hora. A margem vai desde o 1 de Janeiro de 1970 ao ano 2037. * Time: armazena uma hora. A margem de horas vai desde -838 horas, 59 minutos e 59 segundos. O formato de armazenamento HH:MM:SS. * Year: armazena um ano. A margem de valores permitidos vai desde o ano 1901 ao ano 2155. O campo pode ter tamanho dois ou tamanho 4 dependendo de se queremos armazenar o ano com dois ou quatro algarismos. Tipos de cadeia: * Char(n): armazena uma cadeia de longitude xa. A cadeia poder conter desde 0 at 255 caracteres. * VarChar(n): armazena uma cadeia de longitude varivel. A cadeia poder conter desde 0 at 255 caracteres. Dentro dos tipos de cadeia pode-se distinguir dois subtipos, os tipo Test e os tipo Blob (Binary Large Object) A diferena entre um tipo e outro o tratamento que recebem na hora de orden-los e compar-los. No tipo test ordena-se sem ter importncia as maisculas e as minsculas e no tipo blob ordena-se tendo em conta as maisculas e minsculas. Os tipos blob utilizam-se para armazenar dados binrios como podem ser cheiros. * TinyText e TinyBlob: Coluna com uma longitude mxima de 255 caracteres. * Blob e Text: um texto com um mximo de 65535 caracteres. 43

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* MediumBlob e MediumText: um texto com um mximo de 16.777.215 caracteres. * LongBlob e LongText: um texto com um mximo de caracteres 4.294.967.295. H que ter em conta que devido aos protocolos de comunicao os pacotes podem ter um mximo de 16 Mb. * Enum: campo que pode ter um nico valor de uma lista que se especica. O tipo Enum aceita at 65535 valores diferentes. * Set: um campo que pode conter nenhum, um ou vrios valores de uma lista. A lista pode ter um mximo de 64 valores.

3.7.4 Alterando campos da tabela


Suponha que durante a criao da nossa tabela Acervo no zessemos uma boa escolha com o tamanho do campo nome(varchar(20)). Poderamos remover a tabela e criar outra semelhante com os comandos abaixo: DROP TABLE Acervo; mysql> CREATE TABLE Acervo(nome VARCHAR(40), gnero VARCHAR(20), censura INT, durao TIME); Esta uma das alternativas, porm, no a melhor. Imaginem se dados j tivessem sido inseridos na tabela. Teramos que refazer todo o processo de insero de dados, o que muitas vezes invivel. O Comando ALTER TABLE nos permite realizar uma innidade de operaes com a tabela com por exemplo: * Modicar o nome da tabela; * Adicionar uma coluna; * Remover uma coluna ; * Alterar a estrutura da coluna; Para alterarmos o campo "nome"da tabela Acervo, utilizamos a seguinte instruo: * ALTER TABLE Acervo MODIFY nome varchar(40); Agora vamos inserir uma nova coluna, por exemplo "data_lanamento". * ALTER TABLE Acervo ADD data_lanamento date; Para remover basta inserirmos DROP no lugar de ADD e retirarmos campo. * ALTER TABLE Acervo DROP data_lanamento;

Viu como simples? existem outras funcionalidades do ALTER TABLE que no foram exemplicadas, para maiores informaes consulte a documentao do MySQL no site http://www.mysql.org.

44

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.7.5 Primary Key e Foreign Key


Quando estamos trabalhando com banco de dados um conceito importantssimo o conceito de chave. A partir do MySQL 5.0 foi introduzido o conceito de integridade referencial as relaes entre tabelas no banco de dados. Chave Primria ou Primary key um campo da tabela com valores nicos que caracterizam os registros, por exemplo: Uma video locadora possui um banco de dados com a tabela "FILME"e com os campos codFilme , nome, censura, genero e duracao. codFilme nesta tabela poderia representar a primary key desta tabela, pois seus valores seriam unicos e identicariam os registros. J a chave estrangeira ou foreign key nada mais do que a chave primria de outra tabela, que servir como elo entra as tabelas. Seguindo com o exemplo dado anteriormente poderiamos, ao invs de ter o campo genero na tabela "FILME", criar outra tabela chamada "GENERO"com os campos codGenero (primary key), nomeGenero. Agora poderiamos, introduzir na tabela "FILME"uma foreign key, que no caso seria a primary key da tabela "GENERO". Por que utilizar chaves? Imagine se todas as vezes que voc for cadastrar um lme seja necessrio digitar o nome do gnero. Poderiam haver erros durante a digitao do nome, como acentuao e abreviao do mesmo. Por isso mais importante ter uma tabela "GENERO"com os dados previamente cadastrados, sendo necessrio apenas informar o cdigo deste lme. Quando estamos trabalho com integridade referencial, o que estamos fazendo adicionar restries s chaves estrangeiras para que as tabelas sejam relacionadas de tal forma que no seja possvel realizar determinadas operaes caso isto seja prejudicial a estrutura do banco de dados. Tabelas do tipo innoDB suportam integridade referencial. O InnoDB implementa as restries de integridade CASCADE, RESTRICT, SET NULL e SET DEFAULT. No primeiro caso, ao se remover um registro da tabela referenciada pela chave estrangeira os registros relacionados quele removido sero eliminados em todas as tabelas relacionadas. O RESTRICT no permite a remoo de registros que possuam relacionamentos em outras tabelas. Os dois ltimos atribuem os valores DEFAULT ou NULL para as chaves estrangeiras cujos registros relacionados foram excludos. O exemplo abaixo ilustra algumas tabelas que utilizam regras de integridade: CREATE TABLE genero(CodGenero INT auto increment, nomeGenero VARCHAR(20), PRIMARY KEY(CodGenero)) type=innoDB; CREATE TABLE Acervo(CodFilme INT, nome VARCHAR(20), censura INT, duracao TIME, CodGenero INT, PRIMARY KEY(CodFilme),FOREIGN KEY(CodGenero) REFERENCES genero(CodGenero) ON DELETE RESTRICT) type=innoDB; Perceba que no conseguimos criar a tabela lme antes da tabela genero, isso acontece porque ainda nao podemos relacionar a chave primaria da tabela genero com a chave estrangeira da tabela lme, sendo possivel aps a criao da tabela genero. A sintaxe bem simples de ser

45

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

observada: PRIMARY KEY(coluna) FOREIGN KEY(coluna_da_tabela_atual) REFERENCES tabela(coluna_da_tabela_referenciada) ON restrio

3.7.6 Carregando dados em uma tabela


Depois de criar sua tabela, voc precisar povo-la. As instrues LOAD DATA e INSERT so teis para isto. Suponha que seu registro de Filmes possa ser descrito como abaixo: nome Rambo Titanic gnero ao romance censura 10 12 duracao 1:20:00 3:20:00

Como voc est comeando com uma tabela vazia, uma forma simples de povo-la criar um arquivo texto contendo uma linha para cada um de seus lmes, e depois carregar o contedo do arquivo para a tabela com uma simples instruo. Voc pode criar um arquivo texto acervo.txt contendo um registro por linha, com valores separado por tabulaes e na mesma ordem em que as colunas foram listadas na instruo CREATE TABLE. Caso voc no saiba que informao colocar em algum campo, voc pode usar valores NULL. Para represent-lo em seu arquivo texto, use \N (barra invertidam N mausculo). Por exemplo, o registro para o lme "Era do gelo": nome Era do Gelo gnero comdia censura 0 duracao \N

Para carregar o arquivo texto acervo.txt na tabela Acervo, este arquivo dever estar na pasta do banco de dados Locadora que geralmente /var/lib/mysql/Locadora/nome.txt, ou voc pode explicitar o caminho completo para o arquivo. Use este comando: mysql> LOAD DATA INFILE "acervo.txt"INTO TABLE Acervo; Para adicionar registros um a um, basta utilizar a instruo INSERT. Caso voc queira adicionar mais um lme tabela "Acervo"basta utiilzar a instruo a seguir: mysql> INSERT INTO Acervo VALUES ("nomedolme","genero",18,NULL); Observe a utilizao de aspas duplas nos campos do tipo varchar() . Com o INSERT voc tambm pode inserir NULL diretamente para representar um valor em falta. No pode ser usado \N como voc fez com LOAD DATA. Tambm possvel inserir dados em colunas especcas da tabela, bastando para isso identicla.

46

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

mysql> INSERT INTO Acervo(nome) VALUES (Pnico); No MySQL quando estamos criando uma tabela podemos utilizar a palavra chave AUTO_INCREMENT para atribuir valores automaticamente s colunas. por exemplo: CREATE TABLE Acervo2(cod_lme int AUTO_INCREMENT, nome VARCHAR(20), gnero VARCHAR(20), censura INT, durao TIME, PRIMARY KEY(cod_lme)); Na tabela acima, criamos uma nova tabela, Acervo2, com o campo cod_lme. Perceba que no possvel utilizar a palavra chave AUTO_INCREMENT sem informar que a coluna PRIMARY KEY. Este campo recebera valores automaticamente, sendo necessrio informar apenas a palavra default quando utilizada a instruo insert: INSERT INTO Acervo2 VALUES(default,"cdigo da vinci","drama",NULL,NULL); Desta forma, toda vez que for inserido um novo registro, o campo cod_lme, o campo cod_lme ser incrementado automaticamente.

3.8 Lio 6 - Consultando uma tabela


3.8.1 A instruo SELECT
A instruo SELECT usada para recuperar informaes de uma tabela. A forma geral da instruo : SELECT o_que_mostrar FROM de_qual_tabela WHERE condies_para_satisfazer; o_que_mostrar indica o que voc deseja ver. Isto pode ser uma lista de colunas ou * para indicar "todas colunas."de_qual_tabela indica a tabela de onde voc deseja recuperar os dados. A clusula WHERE opcional. Se estiver presente, condies_para_satisfazer especicam as condies que os registros devem satisfazer para fazer parte do resultado.

3.8.2 Selecionando todos os dados / UPDATE E DELETE


Abaixo mostramos a forma mais simples do SELECT recuperar tudo de uma tabela: mysql> SELECT * FROM Acervo; ++-+-++-+ | cod_lme | nome | gnero | censura | durao | ++-+-++-+ | 1 | Titanic | Romance | 12 | 03:20:00 | | 2 | Cdigo da Vinci | Ao | 12 | 02:20:00 |

47

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

| 3 | Todo mundo em Pnico | Comdia | 14 | 01:30:00 | | 4 | O chamado | Terror | 14 | 01:50:00 | | 5 | Star Wars | co cientca | 14 | 01:50:00 | ++-+-++-+ 5 rows in set (0,00 sec) Esta forma de busca muito til quando desejamos ver tabela inteira. Ela retorna todos os campos da tabela, ajudando a encontrar erros de insero de dados. Por exemplo, consultando informos sobre o lme Titanic voc percebeu que as informaes sobre a durao do lme estavam erradas. Para corrigir este problema vamos aprender duas novas instrues.

Delete e Update Edite o arquivo acervo.txt para corrigir o erro, depois limpe a tabela e recarregue-o usando DELETE e LOAD DATA: mysql> DELETE FROM Acervo; (apagar todos os dados da tabela) mysql> LOAD DATA INFILE "acervo.txt"INTO TABLE pet; Ou podemos corrigir somente o registro errado com uma instruo UPDATE: mysql> UPDATE Acervo SET durao = "03:00:00"WHERE nome = "Titanic"; O UPDATE altera apenas o registro em questo e no exige que voc recarregue a tabela.

3.8.3 Selecionando registros especcos


Como foi mostrado na seo anterior, fcil recuperar uma tabela inteira. Apenas omita a clusula WHERE da instruo SELECT. Mas normalmente voc no quer ver toda a tabela, particularmente quando a tabela car grande. Em vez disso, voc estar mais interessado em ter a resposta de uma questo em particular, no qual voc especica detalhes da informao que deseja. Vamos ver algumas consultas de seleo nos termos das questes sobre seus animais. Como foi mostrado anteriormente muito simples recuperar informaes de tabela inteira. Porm, normalmente voc quer buscar informaes especcas, principalmente se a tabela for grande. Vamos ver algumas consultas de seleco que retornam valores especcos. Voc pode selecionar apenas registros especcos da sua tabela. Por exemplo, se voc deseja vericar a alterao que fez o lme Titanic, utilize a seguinte instruo: mysql> SELECT * FROM Acervo WHERE nome = "Titanic"; +++++-+ | cod_lme | nome | gnero | censura | durao | +++++-+ | 1 | Titanic | Romance | 12 | 03:00:00 | +++++-+ 1 row in set (0,05 sec) 48

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

So retornadas todas as colunas com informaes referentes ao lme Titanic. Comparaes de strings normalmente so caso insensitivo, ento voc pode especicar o nome como "Titanic", "TITANIC", etc. Voc pode especicar condies em qualquer coluna. Por exemplo, pode-se fazer uma pesquisa que retorne os lmes com censura maior ou igual 12 anos.

mysql> SELECT * FROM Acervo WHERE censura >= 12; ++-+-++-+ | cod_lme | nome | gnero | censura | durao | ++-+-++-+ | 1 | Titanic | Romance | 12 | 03:00:00 | | 2 | Cdigo da Vinci | Ao | 12 | 02:20:00 | | 3 | Todo mundo em Pnico | Comdia | 14 | 01:30:00 | | 4 | O chamado | Terror | 14 | 01:50:00 | | 5 | Star Wars | co cientca | 14 | 01:50:00 | ++-+-++-+ 5 rows in set (0,04 sec)

Voc pode combinar condies, por exemplo, para encontrar lmes com censura 12 anos e gnero Ao: mysql> SELECT * FROM Acervo WHERE gnero = "Ao"AND censura = 12; +++++-+ | cod_lme | nome | gnero | censura | durao | +++++-+ | 2 | Cdigo da Vinci | Ao | 12 | 02:20:00 | +++++-+ 1 row in set (0,08 sec)

A consulta anterior utiliza o operador lgico AND (e). Existe tambm um operador OR (ou): mysql> SELECT * FROM Acervo WHERE gnero = "Ao"OR censura = 12; +++++-+ | cod_lme | nome | gnero | censura | durao | +++++-+ | 1 | Titanic | Romance | 12 | 03:00:00 | | 2 | Cdigo da Vinci | Ao | 12 | 02:20:00 | +++++-+ 2 rows in set (0,00 sec)

AND e OR podem ser misturados, porm AND ter maior precedncia. A utilzao de parnteses auxilia na orgazinao da consulta.

49

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

mysql> SELECT * FROM Acervo WHERE (gnero = "Ao"AND censura >=12) OR (gnero = "Comdia"AND durao >= "01:00:00"); ++-+++-+ | cod_lme | nome | gnero | censura | durao | ++-+++-+ | 2 | Cdigo da Vinci | Ao | 12 | 02:20:00 | | 3 | Todo mundo em Pnico | Comdia | 14 | 01:30:00 | ++-+++-+ 2 rows in set (0,00 sec) Percebam que possvel fazer comparaes com o campo "time"e as aspas devem obrigatriamente ser colocadas.

3.8.4 Selecionando colunas especcas


Se voc no desejar ver todo o registro de sua tabela, especique as colunas em que voc estiver interessado, separado por vrgulas. Por exemplo, se voc deseja realizar uma consulta que retorne somente os nomes dos lmes juntamente com o gnero utilize a seguinte instruo: mysql> SELECT nome,gnero FROM Acervo; +-+-+ | nome | gnero | +-+-+ | Titanic | Romance | | Cdigo da Vinci | Ao | | Todo mundo em Pnico | Comdia | | O chamado | Terror | | Star Wars | co cientca | +-+-+ 5 rows in set (0,00 sec) Insira mais um campo tabela com o gnero comdia: mysql> INSERT INTO Acervo VALUES (default,"A era do gelo","Comdia",0,"1:30"); Para realizar uma query(consulta) que retorne todos os gneros possves utilize a intruo abaixo. mysql> SELECT gnero FROM Acervo; +-+ | gnero | +-+ | Romance | | Ao | | Comdia | | Terror | | co cientca | | Comdia | 50

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

+-+ 6 rows in set (0,00 sec) Entretanto, perceba que o gnero Comdia apareeu duas vezes. Para minimizar a sada, recupere cada registro apenas uma vez, adicionando a palavra chave DISTINCT: mysql> SELECT DISTINCT gnero FROM Acervo; +-+ | gnero | +-+ | Romance | | Ao | | Comdia | | Terror | | co cientca | +-+ 5 rows in set (0,17 sec)

3.8.5 Utilizando mltiplas tabelas


A tabela Acervo mantm informaes de quais lmes voc tem. Porm, uma vdeo-locadora necessita de informaes sobre seus clientes. Informaes como: * Nome do cliente. * Uma data para que voc saiba quando ocorreu a locao. * Telefone residencial. * Endereo. * Filme locado (referncia a tabela Acervo)

A instruo CREATE TABLE para a tabela Cliente deve se parecer com isto: mysql> CREATE TABLE Cliente(cod_cliente int AUTO_INCREMENT, nome VARCHAR(20), telefone VARCHAR(20), endereo VARCHAR(50), lme_locado INT, data_locao DATE, PRIMARY KEY (cod_cliente), FOREIGN KEY (lme_locado) REFERENCES Acervo(cod_lme) ON DELETE RESTRICT) ENGINE = InnoDB; Observe que o tipo da nova tabela InnoDB. Caso a tabela Acervo no seja deste mesmo tipo ocorrer um erro. Para alterar o tipo da tabela Acervo utilize a seguinte instruo: ALTER TABLE Acervo TYPE = InnoDB; 51

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Como na tabela Acervo, mais fcil carregar os registros iniciais criando um arquivo texto delimitado por tabulaes contendo a informao, porm ca a cargo do administrador escolher o mtodo de insero de dados. Carregue os registros: mysql> LOAD DATA INFILE "cliente.txt"INTO TABLE cliente; Neste ponto voc j est apto a realizar consultas em uma nica tabela. No exemplo da vdeolocadora voc j possui duas tabelas, e em alguns casos ser necessrio fazer mltiplas consultas. Vamos aprender como realizar estes tipos de consulta. Realize uma busca na tabela Cliente para observar o seu fomato. mysql> SELECT * FROM Cliente; +-++-++++ | cod_cliente | nome | telefone | endereo | lme_locado | data_locao | +-++-++++ | 1 | Joo | 351-1551 | SQS 414 Bl. B apt 103 | 1 | 2006-06-24 | | 2 | Joo | 351-1551 | SQS 414 Bl. B apt 103 | 1 | 2006-04-25 | | 3 | Pedro | 344-1551 | SQS 415 Bl. A apt 108 | 1 | 2006-05-25 | | 4 | Ana | 328-1451 | SQS 413 Bl. A apt 415 | 2 | 2006-05-25 | | 5 | Maria | 328-1451 | SQS 413 Bl. A apt 415 | 3 | 2006-05-25 | | 6 | Marcio | 328-1451 | SQS 413 Bl. A apt 415 | 4 | 2006-06-24 | +-++-++++ 6 rows in set (0,00 sec) Observe que o campo lme_locado no mostra o nome do lme, e sim uma identicao relativa a outra tabela. Para realizar uma consulta que busque o nome dos lmes locados pelos clientes em vez deste identicador utiliza-se a seguinte instruo: mysql> SELECT Cliente.nome,Cliente.telefone,Acervo.nome FROM Acervo,Cliente WHERE Cliente.lme_locado=Acervo.cod_lme; ++-+-+ | nome | telefone | nome | ++-+-+ | Joo | 351-1551 | Titanic | | Joo | 351-1551 | Titanic | | Pedro | 344-1551 | Titanic | | Ana | 328-1451 | Cdigo da Vinci | | Maria | 328-1451 | Todo mundo em Pnico | | Marcio | 328-1451 | O chamado | ++-+-+ 6 rows in set (0,11 sec) Existem vrias coisas que devem ser percebidas sobre esta consulta: A clusula FROM lista as duas tabelas porque a consulta precisa extrair informao de ambas. Para combinar informaes de mltiplas tabelas, voc precisa especicar se os registros em uma 52

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

tabela coincidem com os registros em outra (WHERE Cliente.lme_locado = Acervo.cod_lme). Como a coluna nome ocorre em ambas tabelas, voc deve especicar qual a tabela a que voc est se referindo. Isto feito usando o nome da tabela antes do nome da coluna separados por um ponto (.). A consulta acima poderia ser feita da seguinte maneira: SELECT A.nome,A.telefone,B.nome FROM Acervo as B, Cliente as A WHERE A.lme_locado=B.cod_lme; Nesta consulta, ns criamos apelidos para os nomes das tabelas chamando Acervo de B (Acervo as B) e Cliente de A (Cliente as A).

3.9 Lio 7 - A clusula ORDER BY


3.9.1 Ordenando Registros
Durante uma query (busca), geralmente necessrio que as informaes sejam mostradas de um forma organizada. Nos exemplos anteriores os valores eram retornados seguindo a ondem de insero na tabela. A partir de agora ser utilizado a clusula ORDER BY para ordenar os arquivos. No exemplo abaixo feita uma busca nas tabelas "Cliente"e "Acervo"retornando os campos ordenados pela data de locao: mysql> SELECT A.nome,A.telefone,B.nome AS lme,A.data_locao FROM Cliente as A, Acervo as B WHERE A.lme_locado = B.cod_lme ORDER BY data_locao; ++-+-++ | nome | telefone | lme | data_locao | ++-+-++ | Joo | 351-1551 | Titanic | 2006-04-25 | | Pedro | 344-1551 | Titanic | 2006-05-25 | | Ana | 328-1451 | Cdigo da Vinci | 2006-05-25 | | Maria | 328-1451 | Todo mundo em Pnico | 2006-05-25 | | Joo | 351-1551 | Titanic | 2006-06-24 | | Marcio | 328-1451 | O chamado | 2006-06-24 | ++-+-++ 6 rows in set (0,01 sec) Em campos de texto a comparao entre os campos feita no modo caso insensitivo. Para forar uma busca que diferencie maisculas de minsculas utilize a coero BINARY: ORDER BY BINARY(campo). OBS: Percebam que apelidamos a coluna B.nome de lme (B.nome AS lme) . Se isto no fosse feito duas colunas chamadas "nome"iriam aparecer.

53

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.9.2 Ordenando de forma decrescente


Como foi observado no exemplo anterior, a query retornou os campos ordenados de forma crescente. Para ordernar de forma decrescente utilize a palavra chave DESC ao nome da coluna que ser ordenada. Exemplo: Busca feita nas tabelas "Cliente"e "Acervo", ordenada pelo campo "lme". mysql> SELECT A.nome,A.telefone,B.nome AS lme,A.data_locao FROM Cliente as A, Acervo as B WHERE A.lme_locado = B.cod_lme ORDER BY lme DESC; ++-+-++ | nome | telefone | lme | data_locao | ++-+-++ | Maria | 328-1451 | Todo mundo em Pnico | 2006-05-25 | | Joo | 351-1551 | Titanic | 2006-06-24 | | Joo | 351-1551 | Titanic | 2006-04-25 | | Pedro | 344-1551 | Titanic | 2006-05-25 | | Marcio | 328-1451 | O chamado | 2006-06-24 | | Ana | 328-1451 | Cdigo da Vinci | 2006-05-25 | ++-+-++ 6 rows in set (0,00 sec) OBS: Como apelidados "B.nome"de "lme", foi possvel apenas utilizar a referncia lme na clusula ORDER BY.

3.9.3 Ordenando por mltiplas colunas


possvel utilizar a clusula ORDER BY em mltiplas colunas para ordenar seguindo padres diferentes. Exemplicando, podemos realizar uma busca nas tabelas "Acervo"e "Cliente"de tal forma que o campo "nome"seja ordenado de forma crescente e o campo "data_locao"seja ordenado de forma decrescente. mysql> SELECT A.nome,A.telefone,B.nome AS lme,A.data_locao FROM Cliente as A, Acervo as B WHERE A.lme_locado = B.cod_lme ORDER BY A.nome, A.data_locao DESC; ++-+-++ | nome | telefone | lme | data_locao | ++-+-++ | Ana | 328-1451 | Cdigo da Vinci | 2006-05-25 | | Joo | 351-1551 | Titanic | 2006-06-24 | | Joo | 351-1551 | Titanic | 2006-04-25 | | Marcio | 328-1451 | O chamado | 2006-06-24 | | Maria | 328-1451 | Todo mundo em Pnico | 2006-05-25 | | Pedro | 344-1551 | Titanic | 2006-05-25 | ++-+-++ 6 rows in set (0,00 sec)

54

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Observe que a palavra chave DESC aplicada somente coluna data_locao, ela no afeta a ordenao da coluna nome.

3.10 Lio 8 - Funes pr-denidas


3.10.1 Clculo de Datas
Existe uma gama de funes disponibilizadas pelo MySQL que facilitam a vida do administrador do banco. Funes como SUM(), CURDATE(), AVG() e muitas outras sero explicadas nesta lio. Para determinar, por exemplo, quanto tempo se passou (em dias) desde a ltima locao de um cliente, podemos utilizar a seguinte instruo:

mysql> SELECT nome,telefone,CURDATE() AS "Data atual",data_locao,DATEDIFF(CURDATE(),data_ as "Tempo decorrido"FROM Cliente; ++-++++ | nome | telefone | Data atual | data_locao | Tempo decorrido | ++-++++ | Joo | 351-1551 | 2006-07-11 | 2006-06-24 | 17 | | Joo | 351-1551 | 2006-07-11 | 2006-04-25 | 77 | | Pedro | 344-1551 | 2006-07-11 | 2006-05-25 | 47 | | Ana | 328-1451 | 2006-07-11 | 2006-05-25 | 47 | | Maria | 328-1451 | 2006-07-11 | 2006-05-25 | 47 | | Marcio | 328-1451 | 2006-07-11 | 2006-06-24 | 17 | ++-++++ 6 rows in set (0,00 sec)

Podemos observar neste exemplo a utilizao de duas funes, CURDATE() e DATEDIFF. A primeira retorna o valor da data atual (data do sistema) e a segunda retorna a diferena, em dias, entre duas datas. Observem tambm que utilizamos a funo CURDATE() como parmetro para a funo DATEDIFF(). Podemos fazer isto pois o retorno da funo CURDATE() do tipo "date". Para vericar qual pessoa est a mais tempo sem alugar um lme, podemos realizar a seguinte query.

mysql> SELECT nome,telefone,CURDATE() AS "Data atual",data_locao,DATEDIFF(CURDATE(),data_ as "Tempo decorrido"FROM Cliente ORDER BY "Tempo decorrido"DESC LIMIT 1; ++-++++ | nome | telefone | Data atual | data_locao | Tempo decorrido | ++-++++ | Joo | 351-1551 | 2006-07-11 | 2006-04-25 | 77 | ++-++++ 1 row in set (0,05 sec)

55

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Observem que utilizamos a clusula ORDER BY para ordenar os campos de forma decrescente em relao ao Tempo decorrido. Uma nova clusula foi apresentada. LIMIT utilizado para restringir o nmero de linhas que o servidor retorna para um cliente. Para retornar o ms em que ocorreu a locao do lme, pode-se utilizar a funo MONTH(). Esta funo extrai o ms de uma campo do tipo date. mysql> SELECT nome,data_locao,MONTH(data_locao) AS "Ms"FROM Cliente ; ++++ | nome | data_locao | Ms | ++++ | Joo | 2006-06-24 | 6 | | Joo | 2006-04-25 | 4 | | Pedro | 2006-05-25 | 5 | | Ana | 2006-05-25 | 5 | | Maria | 2006-05-25 | 5 | | Marcio | 2006-06-24 | 6 | ++++ 6 rows in set (0,00 sec)

Encontrar pessoas que alugaram algum lme no ms de junho tambm simples: mysql> SELECT nome,data_locao AS "Ms"FROM Cliente WHERE MONTH(data_locao)=6; +++ | nome | Ms | +++ | Joo | 2006-06-24 | | Marcio | 2006-06-24 | +++ 2 rows in set (0,01 sec)

Existe uma innidade de funes para manipulao de campos date/time. Caso desejem conheer novas funes acessem http://dev.mysql.com/doc/refman/4.1/pt/date-and-time-functions.html

3.10.2 Contando Registros / GROUP BY


Geralmente precisamos saber com que tipo de frequncia determinados dados apareem. Seguindo o exemplo da Locadora, caso fosse necessrio saber o nmero de lmes disponvel no acervo, a funo COUNT() ajudaria nesta tarefa. Podemos utilizar a funo COUNT() para realizar uma srie de pesquisas estatsticas, como veremos agora. Saber o nmero de lmes disponveis na locadora o mesmo que saber o nmero de registros existentes na tabela "Acervo". A seguinte busca retornar o nmero de registros das tabelas. mysql> SELECT COUNT(*) FROM Acervo; 56

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

+-+ | COUNT(*) | +-+ |6| +-+ 1 row in set (0,00 sec)

Para retornar o nmero de lmes por gnero: mysql> SELECT gnero,COUNT(*) FROM Acervo GROUP BY gnero; +-+-+ | gnero | COUNT(*) | +-+-+ | Ao | 1 | | Comdia | 2 | | co cientca | 1 | | Romance | 1 | | Terror | 1 | +-+-+ 5 rows in set (0,01 sec) Perceba o uso de GROUP BY para agrupar todos os registros para cada gnero. Sem o GROUP BY seria retornado o seguinte erro: mysql> SELECT gnero,COUNT(*) FROM Acervo; ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause COUNT() e GROUP BY podem ser utilizados para realizar uma innidade de buscas. Por exemplo, para realizar uma pesquisa que retorne quantas vezes um lme j foi alugado: mysql> SELECT A.nome AS "Nome do Filme",COUNT(*) FROM Acervo AS A, Cliente AS B WHERE A.cod_lme = B.lme_locado GROUP BY B.lme_locado; +-+-+ | Nome do Filme | COUNT(*) | +-+-+ | Titanic | 3 | | Cdigo da Vinci | 1 | | Todo mundo em Pnico | 1 | | O chamado | 1 | +-+-+ 4 rows in set (0,09 sec) Observem que foram utlizadas duas tabelas. A tabela Acervo contm o nome do lme e a tabela Cliente o campo lme_locado, que foi agrupado para retornar o nmero de vezes que este lme havia sido alugado.

57

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Para retornar todas as pessoas da tabela Cliente que tm telefone com prexo 351, utilizamos a seguinte instruo: mysql> SELECT nome,telefone FROM Cliente WHERE telefone LIKE "351%"; ++-+ | nome | telefone | ++-+ | Joo | 351-1551 | | Joo | 351-1551 | ++-+ 2 rows in set (0,00 sec) Devemos observar um ponto importante. A utilizao do comparador LIKE. Utilizamos o LIKE para comparar uma string que possa ter campos ainda no explicitados na consulta. O "%"serve justamente para isto. Esta busca retorna todos os telefones com inicio 351 e o "%"indica que o nal da string pode ser qualquer coisa. Agora para retornar o nmero de pessoas que tm telefone com prexo 351 basta utilizar a funo COUNT(). mysql> SELECT COUNT(*) AS "Prexo 351"FROM Cliente WHERE telefone LIKE "351%"; +-+ | Prexo 351 | +-+ |2| +-+ 1 row in set (0,00 sec) Como mostrado acima, no precisamos contar todos os campos da tabela: mysql> SELECT data_locao,COUNT(*) FROM Cliente WHERE data_locao = "2006:05:25"GROUP BY data_locao; ++-+ | data_locao | COUNT(*) | ++-+ | 2006-05-25 | 3 | ++-+ 1 row in set (0,00 sec)

3.10.3 Outras Funes bsicas


Funes bsicas O MySQL possui uma srie de funes que podem ser utilizadas para auxiliar consultas, abaixo listarei algumas bastante conhecidas. Para maiores informaes, acesse o manual do MySQL no site www.mysql.org.

58

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

AVG(Mdia): Retorna a mdia de uma coluna; exemplos: mysql> SELECT AVG(censura) FROM Acervo; ++ | AVG(censura) | ++ | 11.0000 | ++ 1 row in set (0,11 sec)

SUM(Soma): Retorna o somatrio das colunas; exemplos: mysql> SELECT SUM(censura) FROM Acervo; ++ | SUM(censura) | ++ | 66 | ++ 1 row in set (0,00 sec)

MIN(Mnimo): Retorna o menor valor para uma coluna; exemplos: mysql> SELECT MIN(censura) FROM Acervo; ++ | MIN(censura) | ++ |0| ++ 1 row in set (0,00 sec)

MAX(Mximo): Retorna o valor mximo para uma coluna; mysql> SELECT MAX(censura) FROM Acervo; ++ | MAX(censura) | ++ | 14 | ++ 1 row in set (0,01 sec)

59

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.11 Lio 9 - Conectando e Desconectando do Servidor


3.11.1 Congurando os Privilgios Iniciais do MySQL
Aps instalar o MySQL executamos dois scripts bsicos. Um deles o script mysql_install_db que cria as tabelas de concesses e o outro o mysqld_safe para iniciar o servidor. Ao executar o script mysql_install_db, um banco de dados chamado mysql criado, e dentro deste banco existe uma tabela chamada user. O usurio root criado durante a execuao deste script. Para vericar o Contedo da tabela user realize a seguinte busca: mysql> SELECT Host,User,Password FROM user; +++-+ | Host | User | Password | +++-+ | localhost | root | | | debian | root | | | debian | | | | localhost | | | +++-+ 4 rows in set (0,00 sec) O usurio root o super-usurio, podendo alterar qualquer coisa no sistema. Ele tem permisso de acesso local, no podendo acessar o banco remotamente. Deve-se atentar para o fato de que a senha inicial de root vazia, e qualquer pessoa ter acesso ao banco. Um usurio annimo tambm criado. Este usurio tem acesso ao banco de dados "test". Os usurio locais do sistema podem acessar o MySQL como este usurio annimo. Deixar a senha de root vazia no uma boa coisa. Aps a instalao, a primeira coisa que devemos fazer trocar a senha de root. Veremos trs maneiras de modicar esta senha. 1) Utilizando a funo PASSWORD * shell> mysql -u root mysql * mysql> SET PASSWORD FOR root@localhost=PASSWORD(nova_senha); Substitua nova_senha pela senha que voc deseja usar. 2)Voc tambm pode manipular diretamente a tabela privilgios: * shell> mysql -u root mysql * mysql> UPDATE user SET Password=PASSWORD(nova_senha) * -> WHERE user=root; * mysql> FLUSH PRIVILEGES; FLUSH PRIVILEGES diz ao servidor para reler as tabelas de permisses. 3)Outra forma de congurar a senha utilizando o comando mysqladmin:

60

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* shell> mysqladmin -u root password nova_senha

De agora em diante a senha dever ser especicada para se ter acesso ao servidor. Para recriar as tabelas de permisses completamente, remova todos os arquivos .frm .MYI e .MYD no diretrio contendo o banco de dados mysql. Caso o MySQL tenha sido instalado no debian atravs do APT este banco se encontra em /var/lib/mysql. Caso a instalao tenha sido feita a partir do cdigo-fonte, este banco se encontra no diretrio raiz do MySQL, dentro da pasta var.

3.11.2 Conectando e Desconectando do Servidor


Para conectar ao MySQL utilizamos o seguinte comando: shell> mysql -h servidor -u usuario -p Enter password: ******** Neste comando, -h indica a localizao onde o servidor MySQL est instalado. Caso voc esteja acessando localmente, este parmetro pode ser omitido. -u indica o usuario e -p a senha. Percebam que a senha no foi passada como parmetro. A senha ser requisitada logo em seguida. shell> mysql -h host -u user -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.0.22 Type help; or \h for help. Type \c to clear the buffer. mysql> A senha pode ser passada como parametro da seguinte maneira: shell> mysql -h host -u user -psuasenha A senha deve ser colocada junto ao argumento -p. Caso algum espao seja colocado, na verdade a senha ser dada como o banco que seria iniciado junto ao MySQL. Para se conectar como usurio annimo basta digitar o comando: shell> mysql Para disconectar basta utilizar a instruo QUIT (ou \q) no prompt mysql>: mysql> QUIT Bye

61

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.12 Lico 10 - Adicionando Novos Usurios ao MySQL


3.12.1 Um pouco sobre as intrues REVOKE E GRANT
Grant e Revoke so duas instrues com uma sintaxe um pouco complicada, nesta lio no iremos nos aprofundar muito na sintaxe das intrues. Ser apenas uma breve introduo. Os comandos GRANT e REVOKE permitem aos administradores do sistema criar usurios e conceder e revogar direitos aos usurios do MySQL em quatro nveis de privilgios. Sua sintaxe e dada por: GRANT "Previlgios"ON "banco_de_dados"TO "usuario@servidor"IDENTIFIED BY "alguma_senha" REVOKE "Previlgios" ON "banco_de_dados" FROM "usuario" Podem ser passados mais argumentos a instruo GRANT. Para maiores informaes, pode ser acessado o site com a documentao do MySQL, www.mysql.org. Os nveis de previlgios so: Nvel Global: Este tipo nvel de previlgio aplicado a todos os bancos do servidor. Tabelas onde os previlgios so armazenados: mysql.user. Sintaxe: GRANT ALL ON *.* e REVOKE ALL ON *.* Nvel dos bancos de dados: Neste nvel, os previlgios so aplicados todas as tabelas de um determinado banco de dados. Tabelas onde os previlgios so armazenados: mysql.db e mysql.host. Sintaxe: GRANT ALL ON db.* e REVOKE ALL ON db.* Nvel das tabelas: Neste nvel, os previlgios so aplicados todas as colunas de uma determinada tabela. Tabelas onde os previlgios so armazenados: mysql.tables_priv. Sintaxe: GRANT ALL ON db.table e REVOKE ALL ON db.table Nvel das colunas: Privilgios de colunas aplicam-se a uma nica coluna em uma determinada tabela. Tabelas onde os previlgios so armazenados: mysql.columns_priv. Para as instrues GRANT e REVOKE, os previlgios podem ser especicados como: * ALL [PRIVILEGES] : Congura todos os privilgios simples exceto WITH GRANT OPTION

62

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* ALTER: Permite o uso de ALTER TABLE * CREATE: Permite o uso de CREATE TABLE * CREATE TEMPORARY TABLES: Permite o uso de CREATE TEMPORARY TABLE * DELETE: Permite o uso de DELETE * DROP: Permite o uso de DROP TABLE. * EXECUTE: Permite que o usurio execute stored procedures (MySQL 5.0) * FILE: Permite o uso de SELECT ... INTO OUTFILE e LOAD DATA INFILE. * INDEX: Permite o uso de CREATE INDEX e DROP INDEX * INSERT: Permite o uso de INSERT * LOCK TABLES: Permite o uso de LOCK TABLES em tabelas nas quais se tem o privilgio SELECT. * PROCESS: Permite o uso de SHOW FULL PROCESSLIST * REFERENCES: Para o futuro * RELOAD: Permite o uso de FLUSH * REPLICATION CLIENT: Da o direito ao usurio de perguntar onde o slave/master est. * REPLICATION SLAVE: Necessrio para a replicao dos slaves (para ler logs binrio do master). * SELECT: Permite o uso de SELECT * SHOW DATABASES: SHOW DATABASES exibe todos os banco de dados. * SHUTDOWN: Permite o uso de mysqladmin shutdown * SUPER: Permite a conexo (uma vez) mesmo se max_connections tiverem sido alcanados e executa o comando CHANGE MASTER, KILL thread, mysqladmin debug, PURGE MASTER LOGS e SET GLOBAL * UPDATE: Permite o uso de UPDATE * USAGE: Sinnimo para sem privilgios. * GRANT OPTION: Sinnimo para WITH GRANT OPTION * USAGE: pode ser usado quando voc quer criar um usurio sem privilgios.

3.12.2 Nomes de Usurios e Senhas do MySQL


Existem alguns fatos que devemos atentar quando estamos falando de Nomes de Usurios utilizados pelo MySQL. * Os nomes de usurios do MySQL no tm nenhuma ligao com os usurios do sistema operacional. * Nomes de usurios MySQL podem ter o tamanho de at 16 caracteres; Nomes de usurio Unix normalmente so limitados at 8 caracteres. * Senhas MySQL no tem nenhuma relao com senhas do sistema operacional. * O MySQL criptografa senhas utilizando um algortimo diferente que o utilizado pelo processo de login do Unix. O MySQL seguro contra sniffs (programas que capturam senha pela rede) e at mesmo quanto a captura do banco "mysql". Abaixo esto listadas diversas forma de passar a senha como parmetro para o servidor: * mysql user=usuario password=senha nome_do_banco 63

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

* mysql user=usuario password nome_do_banco * mysql -u usuario -p nome_do_banco

Perceba que nos dois ltimos exemplos a senha no nome_do_banco.

3.12.3 Adicionando Novos Usurios ao MySQL


Vamos aprender duas maneiras de adicionar usurios no mysql, utilizando instrues GRANT ou manipulando as tabelas de permisses do MySQL diretamente. O mtodo preferido utilizar instrues GRANT, porque elas so mais concisas e menos propensas a erros. Existem vrios programas de colaboradores (como o phpMyAdmin) que podem ser utilizados para criar e administrar usurios. Acesse o MySQL como root: shell> mysql user=root mysql Abaixo esto trs exemplos de como adicinoar usurios com instrues GRANT: Usuario 1: mysql> GRANT ALL PRIVILEGES ON *.* TO usuario1@localhost IDENTIFIED BY alguma_senha WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO usuario1@% IDENTIFIED BY alguma_senha WITH GRANT OPTION; Usuario 2: mysql> GRANT RELOAD,PROCESS ON *.* TO usuario2@localhost; Usuario 3: mysql> GRANT USAGE ON *.* TO usuario3@localhost; Estas instrues GRANT conguram trs novos usurios: * usuario1: Um superusurio completo que pode conectar no servidor de qualquer lugar e possui todos os previlgios. * usuario2: Um usurio que possa conectar da mquina local sem uma senha e que concedido os privilgios administrativos reload e process. * usuario3 Um usurio que pode conectar sem uma senha, mas somente na mquina local. No concedido nenhum privilgio, o tipo de privilgio USAGE permite a criao de um usurio sem privilgios. 64

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Tambm possvel adicionar a mesma informao de acesso do usurio diretamente, utilizando instrues INSERT e depois dizendo ao servidor para recarregar as tabelas de permisses: shell> mysql user=root mysql mysql> INSERT INTO user VALUES(localhost,usuario1,PASSWORD(alguma_senha), Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y); mysql> INSERT INTO user VALUES(%,usuario1,PASSWORD(alguma_senha), Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y); mysql> INSERT INTO user SET Host=localhost,User=usuario2, Reload_priv=Y, Process_priv=Y; mysql> INSERT INTO user (Host,User,Password) VALUES(localhost,usuario3,); mysql> FLUSH PRIVILEGES; Para congurar o superusurio, voc s precisar criar uma entrada na tabela user com os campos de privilgios congurados para Y. Na ltima instruo INSERT (para o usurio dummy), apenas as colunas Host, User e Password nos registros da tabela user tem valores atribudos. O MySQL atribui a todas as outras colunas o valor padro de N. O exemplo abaixo adiciona um usurio com senha novasenha, e que tm permisses de acesso ao banco CDTC apenas da mquina local, ao banco ITI apenas do host cdtc.gov.br: shell> mysql user=root mysql mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON CDTC.* -> TO usuario@localhost -> IDENTIFIED BY novasenha; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON ITI.* -> TO usuario@cdtc.gov.br -> IDENTIFIED BY obscure;

Se voc deseja fornecer a um usurio especco acesso de qualquer mquina em um determinado domnio (por exemplo, meudomnio.com), voc pode utilizar uma instruo GRANT como a seguir: mysql> GRANT ... -> ON *.* -> TO meusername@%.mydomain.com -> IDENTIFIED BY mypassword; 65

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Para realizar a mesma coisa modicando diretamente as tabelas de permisses, faa isto: mysql> INSERT INTO user VALUES (%.meudominio, meunomedeusuario PASSWORD(minhasenha),...); mysql> FLUSH PRIVILEGES;

Deletando Usurios do MySQL DROP USER nome_usuario Este comando foi adicionado ao MySQL 4.1.1. Ele apaga um usurio que no possua nenhum privilgio.

3.13 Lio 11 - Ferramentas Grcas de Adminstrao


3.13.1 Conheendo algumas ferramentas
Como podemos observar adminstrar contas de usuario por linhas de comando muito complicado. Para facilitar esta tarefa, existem ferramentas grcas que auxiliam na administrao do Mysql. Mas vale ressaltar, que quando utilizamos estas ferramentas estamos sujeitos a falhas de segurana, sendo de responsabilidade do administrador vericar o melhor mtodo a ser utilizado. Existem vrias ferramentas grcas que auxiliam nesse processo. Podemos citar como exemplo: * MySQL-Front: MySQL-Front um front-end grco para a base de dados do MySQL. Porque uma aplicao "real", pode oferecer uma interface com o usuario mais renada do que possvel com os sistemas construdos em PHP e em HTML. * PhpMyAdmin: um script em PHP para gerenciamento do MySQL (a mesma coisa que faz o MySQLFront), s que geralmente usado nos servidores por ser PHP e roda no Browser do usuario. * MySQL-Admin: Mais uma ferramenta para adminstrao. Com uma interface bem amigvel, nos permite excluir e adicionar usuarios, parar o servidor, congurar arquivos como o mysqld_safe e muitas outras opes. Neste curso aprendermos a utilizar algumas funes do PhpMyAdmin.

3.13.2 Instalando o PhpMyAdmin


A instalao do PhpMyAdmin muito simples, uma vez que temos os caminhos para os repositrios congurados corretamente a instalao e feita da seguinte maneira: * shell> apt-get install PhpMyAdmin

66

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Basta responder sim para algumas perguntas e pronto, estamos com um front-end para mysql instalado. Tambm ser necessrio instalar o Apache, porm esse processo automatizado.

3.13.3 Acessando o PhpMyAdmin


Depois de instalado, acessamos o PhpMyAdmin pelo navegador digitando my-domain/phpmyadmin/ na barra de endereo, onde my-domain o endereo do servidor MySQL. Caso o servidor esteja na mquina onde voc est acessando o PhpMyAdmin, basta digitar localhost/phpmyadmin. Uma tela apareer pedindo seu login e senha.

Acesse como administrador, caso o MySQL seja recm instalado o usuario ser root e no haver senha.

67

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.13.4 Tela de apresentao


Uma vez que voc esteja logado, uma tela do PhpMyAdmin como a mostrada abaixo apareer. Esta seo com vrios menus o local a partir do qual voc congurar as principais funes do PhpMyAdmin.

3.13.5 Criando banco de Dados no PhpMyAdmin


Como o foco do curso no ensinar como utilizar o PhPMyAdmin, apresentaremos somente algumas funes primordiais desta ferramenta. A primeira delas ser criar um banco de dados. Cliclando no menu banco de dados seremos redirecionados para seguinte tela:

68

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Agora basta digitarmos o nome do banco de dados a ser criado. Os bancos de dados ja existentes tambm so apresentados. Para acess-los basta clicar sobre o nome.

69

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.13.6 Criando tabelas no PhpMyAdmin


Continuando com o exemplo, para criarmos tabelas tambm muito simples. Para criar tabelas dentro do banco de dados selecionado tambm bastante intuitivo. Basta digitarmos o nome da tabela a ser criada e o nmero de campos que a tabela ter. Agora basta colocar os dados relativos a tabela e clicar em salvar.

70

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.13.7 Adicionando Novos Usurios no PhpMyAdmin


Vamos aprender agora como adicionar novos usuarios ao banco de dados. Voltemos tela principal do PhpMyAdmin clicando em servidor:localhost no topo da tela. Agora clicando no menu Privilgios acessamos a seo onde poderemos adicionar e remover usuarios.

71

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Para adicionar usuarios basta cilicar na aba "Adicionar Novo Usuario"

72

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Digite os dados necessrios e as permisses que o novo usurio possuir. Clique em executar e pronto, temos um novo usurio cadastrado no Servidor MySQL. Neste ponto nalizamos um breve introduo desta tima ferramenta de administrao. Caso o usurio queira encontrar mais informaes sobre o PhpMyAdmin pode acessar a pgina do projeto em http://www.phpmyadmin.net/home_page/index.php.

3.14 Lio 12 - Stored Procedures e Funes


Stored Procedures e funes, so rotinas a partir de instrues SQL que podem ser armazenadas no servidor MySQL. Para quem j tem experincia na rea de programao, as implementaes mostradas nesta lio sero de facil entendimento. Uma vez que estas rotinas estejam armazenadas no servidor, o administrador do banco de dados no necessitar repet-las quando for necessrio utiliz-las. Este armazenamento de informaes muito til, visto que o uxo de informaes entre o servidor e o cliente reduzido. Porm, a carga no sistema do servidor aumenta, j que a maior parte do trabalho feita no servidor. 73

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Situaes onde stored procedures so utilizadas: * Quando aplicaes cliente so escritas em linguagens diferentes * Operaes repetitivas * Rotinas crticas, quando a segurana prioritria. Stored procedures fornecem um ambiente que pode assegurar que cada operao seja registrada de forma apropriada.

necessrio que a tabela proc exista no banco de dados mysql. Esta tabela criada durante a instalao do MySQL 5.0. Caso esta tabela no exista certique-se de atulalizar as tabelas de concesses.

3.14.1 Sintaxe de Stored Procedure


Para criar Stored procedure e funes utiliza-se as instrues: * CREATE PROCEDURE e CREATE FUNCTION Um procedimento chamado usando uma instruo CALL e s pode passar valores de retorno usando variveis de sada. Funes podem retornar valores escalares e so chamadas dentro de uma instruo. Exemplo: * SELECT FUNCO(parmetros);

Atualmentem o MySQL s preserva o contexto para o banco de dados padro. Isto , se voc usar USE dbname dentro de um procedimento, o banco de dados original restaurado depois da sada da rotina. Uma rotina herda o banco de dados padro de quem a chama, assim geralmente as rotinas devem utilizar uma instruo USE dbname, ou especique todas as tabelas com uma referncia de banco de dados explicita, ex. dbname.tablename. Sintaxe: CREATE PROCEDURE e CREATE FUNCTION CREATE PROCEDURE sp_name ([parmetros[...]])[caracterstica ...] corpo_da_rotina CREATE FUNCTION sp_name ([parmetros[...]])[RETORNA tipo] [caracterstica...] corpo_da_rotina parameter: [ IN | OUT | INOUT ] nome_tipo_parmetro tipo: Qualquer tipo vlido do MySQL 74

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

caracterstica: LANGUAGE SQL | [NOT] DETERMINISTIC | SQL SECURITY DEFINER | INVOKER | COMMENT string corpo da rotina: Indicao vlida do procedimento do SQL -

RETURNS pode ser especicada apenas por uma FUNCTION. usada para indicar o tipo de retorno da funo. A lista de parmetros entre parenteses deve estar sempre presente. Se no houver parmetros, uma lista de parmetros vazia de () deve ser usada. Existem trs tipos de parmetros: * IN : parmetros de entrada * OUT : parmetros de sada * INOUT : parmetros de entrada e sada

O MySQL tambm permite rotinas contendo instrues DDL (como CREATE e DROP) e instrues de transao SQL (como COMMIT). Esses conceitos podem paraer um pouco confusos no momento, mas com os exemplos mostrados no decorrer da lio, boa parte das dvidas sero esclarecidas.

3.14.2 Exemplos de Stored Procedures e Functions


Abaixo temos um exemplo de uma stored procedure simples que usa um parmetro OUT. O camando delimiter serve para alterar o delimitador de instruo para antes da denio do procedure (troca ";"por "|"). mysql> delimiter | mysql> create procedure simpleproc(out numero int) -> begin -> set numero=10; -> end -> | Query OK, 0 rows affected (0.02 sec) mysql> CALL simpleproc(@a)| Query OK, 0 rows affected (0.00 sec)

75

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

mysql> SELECT @a| ++ | @a | ++ | 10 | ++ 1 row in set (0.00 sec) Neste procedimento, simplesmente atribuimos o valor 10 varivel @a. A seguir esta um exemplo de uma funo que utiliza um parametro, realiza uma operao usando uma funo SQL e retorna o resultado: mysql> delimiter | mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) -> RETURN CONCAT(Hello, ,s,!); -> | Query OK, 0 rows affected (0.00 sec) mysql> SELECT hello(world)| +-+ | hello(world) | +-+ | Hello, world! | +-+ 1 row in set (0.00 sec)

3.14.3 Declarando Variveis


Tambm permitido declarar variveis dentro de funes e procedimentos. Vejamos um exemplo: mysql> CREATE PROCEDURE declarandovariaveis() > BEGIN > DECLARE a INT; > DECLARE b INT; > SET a=5; > SET b=5; > INSERT INTO t VALUES (a,b); > END >| O procedimento acima declara duas variveis, a e b, atribuindo o valor 5 a elas. Depois de atribuido os valores, o procedimento os insere em uma tabela genrica t.

76

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Como observamos declarar variveis muito simples e de grande utilidade quando preciso elaborar procedimentos mais complexos.

3.14.4 Condies
Assim como em outras linguagens, podemos estabelcer condies para rotinas em nossos procedimentos. Vejamos o exemplo: mysql> create procedure condio(in parametro int) > begin > if parametro=0 then select " igual a zero"; > else select " diferente de zero" > end if; > end >| No exemplo acima, o procedimento recebe um numero como parmetro, e observado se este numero igual ou diferente de zero. Acima foi utilizada a expreso if-else, agora vejamos um exemplo da estrutura case: mysql> create procedure condio2(in parametro int) > begin >case parametro >when 0 then select "zero"; >when 1 then select "um"; >else select "no zero nem um"; > end case; >end >| Agora vecamos o valor do parametro utilizando a instruo case. Poderiamos continuar com comparaes caso fosse necessrio. Por exemplo: mysql> create procedure condio2(in parametro int) > begin >case parametro >when 0 then select "zero"; >when 1 then select "um"; >when 3 then select "tres"; >else select "outro numero"; > end case; >end >|

77

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

3.14.5 Laos de Repetio


Podemos tambm colocar laos de repetio em nossos procedimentos, Veremos aqui duas estruturas que tm essa funcionalidade. Para observarmos melhor estes exemplos, precisamos cria uma tabela qualquer, utilize o camando create table, e crie uma tabela com um campo inteiro. While: mysql> create procedure lao(in parametro int) -> begin -> while parametro>=0 do -> insert into tabela_criada values (parametro); -> set parametro = parametro - 1; ->end while; -> end -> | Este procedimento, quando chamado, ir inserir na tabela criada valores de 0 ao numero passado como parmetro. Repeat: mysql> create procedure lao1(in parametro int) -> begin -> repeat -> select parametro; -> set parametro = parametro + 1; ->until parametro >= 5 -> end repeat; -> end Este procedimento repetir do valor do numero passado como parametro at 5, porm se o numero form mairo que 5 ele simplesmente imprimir o numero na tela.

78