Professional Documents
Culture Documents
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
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
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
Brasil/DF
Parte I
CDTC
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
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
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".
CDTC
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
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.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
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
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
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.
17
CDTC
Brasil/DF
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
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
Brasil/DF
Coluna So dados elementares que descrevem a entidade. um elemento de uma tupla. Exemplos:
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
Brasil/DF
21
CDTC
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.
22
CDTC
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
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
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
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
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 )
CDTC
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.
CDTC
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
Brasil/DF
* Todos os programas MySQL podem ser chamados com as opes help ou -? para obter ajuda online.
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
Brasil/DF
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
Brasil/DF
Uma tela de congurao apareer, bastando continuar. Pronto, seu Banco de Dados esta pronto para ser utilizado!
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
CDTC
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 &
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
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
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_% | | ++++
35
CDTC
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.
36
CDTC
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
Brasil/DF
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
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.
39
CDTC
Brasil/DF
40
CDTC
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
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.
CDTC
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
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.
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
Brasil/DF
45
CDTC
Brasil/DF
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
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.
47
CDTC
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.
CDTC
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
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.
CDTC
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)
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
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
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).
53
CDTC
Brasil/DF
54
CDTC
Brasil/DF
Observe que a palavra chave DESC aplicada somente coluna data_locao, ela no afeta a ordenao da coluna nome.
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
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
CDTC
Brasil/DF
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
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)
58
CDTC
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
Brasil/DF
60
CDTC
Brasil/DF
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.
61
CDTC
Brasil/DF
62
CDTC
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.
CDTC
Brasil/DF
CDTC
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
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.
66
CDTC
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.
Acesse como administrador, caso o MySQL seja recm instalado o usuario ser root e no haver senha.
67
CDTC
Brasil/DF
68
CDTC
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
Brasil/DF
70
CDTC
Brasil/DF
71
CDTC
Brasil/DF
72
CDTC
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.
CDTC
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.
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
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.
75
CDTC
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)
76
CDTC
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
Brasil/DF
78