CDTC Mysql

Embed Size (px)

Citation preview

MySQL24 de novembro de 2006

SumrioI Sobre essa apostila 3 5 1011 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 MySQL1 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

3

Parte I

Sobre essa apostila

4

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

ContedoO 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 ([email protected]), desde outubro de 2006. Criticas e sugestes construtivas so bem-vindas a qualquer tempo.

AutoresA 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 [email protected], ou da home page da entidade, atrves da URL http://www.cdtc.org.br.

GarantiasO 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.

LicenaCopyright 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.

5

Parte II

Informaes Bsicas

6

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Sobre o CDTCObjetivo 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 alunoNeste 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.

LicenaCopyright 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 WikipdiaVoc 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 PassosPara 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 TutorSegue-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;

9

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 MysqlO 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 ensino2.1 ObjetivoQualicar tcnicos e programadores no SGBD MySQL.

2.2 Pblico AlvoTcnicos e Programadores que desejam trabalhar com MySQL.

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

2.4 DescrioO 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 MetodologiaO 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 ProgramaO 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 AvaliaoToda 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

Mysql3.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 Dados3.2.1 Conceitos Fundamentais sobre Banco de DadosCaso 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 DadosO 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 RelacionamentoModelo 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 RelacionamentoRelacionamentos 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 NormalizaoConceito 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 IntroduoO 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 MySQLA 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 MySQL3.4.1 Instalando o MySQL no Debian - 1APT - 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 - 2A 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 - 3Instalando 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 - 1Instalando 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 -2Viso 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 / TestesDepois 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 Uso3.5.1 Um pouco da histria do SQLStructured 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 usoA 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 ComandosDML - 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 dados3.6.1 Comandos de AcessoAcessando 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 dadosSe 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 Tabelas3.7.1 Tipos de TabelasAntes 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 tabelaA 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 CamposPara 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 tabelaSuponha 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 KeyQuando 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 tabelaDepois 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 tabela3.8.1 A instruo SELECTA 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 DELETEAbaixo 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 especcosComo 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 especcasSe 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 tabelasA 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 BY3.9.1 Ordenando RegistrosDurante 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 decrescenteComo 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-denidas3.10.1 Clculo de DatasExiste 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: