Aprenda alguns truques e conceitos da linguagem SQL aplicada ao MySQL e monte sua locadora Domine a lngua MySQL Uma abordagem terica-prtica sobre a linguagem de banco de dados mais usada no mundo chassi.indd 1 17/9/2008 12:06:01 NA PRTICA 8 geEk especial Curta sua pipoca com MySQL Aprenda alguns truques e conceitos da linguagem SQL aplicada ao MySQL e monte sua locadora I magine a seguinte situao: voc entra em uma locadora, escolhe seu lme e pede balconista. Ela pergunta seu cdigo, mas voc no se lembra. A garota procura seu cadastro por meio de uma parte do seu nome, ou outro dado que voc tenha informado em sua cha. Ento, ela insere a locao no sistema com registro de data para controlar quantos dias voc car com o lme. O sistema dessa locadora no difcil de se reproduzir, desde que eles saibam utilizar seu banco de dados. Os recursos citados no pargrafo acima esto neste tutorial, que ensina, de forma prtica, como aproveitar bem o MySQL. O sistema possuir trs tabelas bsicas: clientes, lmes e aluguis. Em aluguis existe apenas a referncia aos dados das outras duas tabelas, mas o banco retornar todas as informaes juntas, automaticamente. Ao contrrio do que muitos acreditam, o banco de dados no so- mente uma ferramenta de armazenamento de informaes, mas pode, tambm, manipular e retornar as informaes pr-conguradas. O programador, geralmente, aprofunda-se na linguagem que acha mais interessante, como PHP, ASP ou Java, e termina por no perceber que, cedo ou tarde, ter de colocar as informaes em um banco de dados. No para fazer um backup de todas as matrias do site, mas para dar praticidade aos sistemas. O que ele no sabe que, por no conhecer bastante a linguagem, ele pode perder funcionalidades importantes do prprio banco. E se fosse possvel que o banco de dados retornasse quaisquer nmeros que voc gravasse como decimais? E se, para isso, no fosse necessria nenhuma programao extra? E se pudssemos relacionar uma ou mais tabelas e o banco de dados as retornasse j mescladas com os valores referentes? Conhecendo um pouco mais a linguagem SQL, a programao no precisa car reinventando a roda. Comece aprendendo os tipos de dados que o banco suporta. Se quiser guardar um nmero, escolha, preferencialmente, o tipo inteiro. Mas se esse nmero precisa de casas decimais, como um valor mo- netrio, use o tipo de dado oat que guarda os nmeros com quantas casas decimais voc preferir. Contudo, se esse valor for referente a um telefone ou CEP, na verdade, ele no um numero, mas um en- dereamento, e deve ser tratado como tal, ou seja, pertence ao tipo varchar. Portanto, um nmero s um nmero quando voc puder fazer clculos matemticos sobre ele. Listas, tambm conhecidas como ENUM, no guardam diversos va- lores ao mesmo tempo, elas tm um grupo de palavras ou expresses que so aceitas pelo banco. Se tentar inserir um nmero diferente, ele cancelar a incluso do registro. Data e hora so um problema para qualquer programador: ter que dividir os pedaos de uma data ou hora e analisar cada um em separado (dia, ms, ano), repartindo at chegar ao valor em segun- dos e diminuir um do outro para, ento, reconverter e descobrir qual a diferena entre os dois perodos de tempo. O MySQL consegue fazer esses clculos e retornar diferenas entre datas que j esto no banco de dados. O prximo passo aprender a mesclar as tabelas sem que seja necessrio chamar uma tabela e a cada linha fazer um novo pedido ao banco de dados referente outra tabela. Este recurso se chama JOIN e poupa os prossionais de programao. por Michael Granados 08-13-Rev.indd 8 18/12/2007 16:09:08 geEk especial 9 GEEK ESPECIAL 1 Comeamos o sistema criando o banco de dados locadora por meio do comando CREATE DATABASE. Logo depois, passe a utilizar esse banco com o comando USE. 2 Crie a tabela de clientes. Repare nos tipos de dados: cdigo inteiro, nome pedao de texto (varchar), idade inteiro e endereo outro varchar maior. Primary key indica o campo-chave. 3 Ento, inserimos alguns clientes em nosso banco de dados. Note que a idade o nico valor que no precisa de aspas. Ob- serve, tambm, que o campo cdigo no foi colocado. 4 Ao selecionarmos a tabela, note que o cdigo inseriu valores incrementados automaticamente. Isso se deve ao fato de o campo possuir auto_increment em sua criao. 5 Dene-se a ordem na qual o sistema retornar os valores por meio da propriedade ORDER BY [COLUNA]. Voc pode usar ASC para crescente e DESC para decrescente. ASC a congurao-padro. 6 Criemos, ento, a segunda tabela: lmes, em que temos novamen- te o primary key auto_increment, um varchar e uma lista ENUM com algumas denies e a sinopse do tipo TEXT, para textos longos. 08-13-Rev.indd 9 18/12/2007 16:09:08 NA PRTICA 10 geEk especial 7 Veja o que acontece quando tentamos inserir um campo diferente dos valores indicados em ENUM. A palavra desenho no foi denida como parte de classicao. 8 No passo anterior, um erro ocorre. Dessa forma, inserimos alguns filmes. Repare que, novamente, no nos importamos com o cdigo, j que ele gerado de modo automtico. 9 Crie as tabelas relacionais. Tanto cliente como lme so do mesmo tipo dos campos codigo e cod, respectivamente. DataAluguel ser do tipo DATE. 10 Ainda sobre a figura anterior, Valor do tipo oat com at cinco dgitos e mais dois decimais. Inicie a instalao. A essa altura, sua configurao deveria ser feita no bloco de notas. 11 Se voc quiser resolver esse problema de forma simples e eciente, selecione apenas os campos que deseja visualizar logo aps a expresso SELECT. 12 Insira um campo em aluguis para seguir adiante. O campo date segue o formato americano. Valor foi denido para funcinar com ponto antes dos decimais e com apenas uma casa decimal. 08-13-Rev.indd 10 18/12/2007 16:09:10 geEk especial 11 GEEK ESPECIAL 13 Fazer um join muito simples, utilize a seguinte sintaxe: JOIN [TABELA] ON [COMPARAO ENTRE AS TABELAS]. Os camos mostrados so denidos pela sintaxe [TABELA].[COLUNA]. 14 Sobre a figura do passo 13, a primeira comparao requer que a mesclagem seja feita onde o cdigo de cliente for igual ao cliente de aluguis. Na seqncia, um join com as trs tabelas. 15 Observe que a tabela em si no trabalha com nenhum texto, apenas faz referncias s outras tabelas. Vamos seguir com as demais tabelas. 16 Por fim, o join das trs tabelas. Veja a facilidade em se trabalhar com campos de dados relacionais, o que traz grandes benefcios ao seu projeto. 17 Se quisermos selecionar a soma dos valores da tabela aluguis, use SUM(CAMPO). Esse tipo de dado pode ser obtido a qualquer momento. 18 Agora, com a propriedade GROUP BY [CAMPO], saberemos quanto cada cliente deve pagar. Note que somente a tabela alu- guis foi selecionada. 08-13-Rev.indd 11 18/12/2007 16:09:12 NA PRTICA 12 geEk especial 19 Agora, inserimos o JOIN em meio ao exemplo anterior. Essa tarefa vai testar mais funcionalidades do banco de dados relacional que est sendo criado. 20 Quantos filmes, clientes e locaes a locadora possui? Com um simples COUNT(*) resolvemos o problema de modo muito simples. 21 Qual o preo mais alto cobrado na locadora? Use MAX(CAMPO) para ter esse resultado. Outra tarefa muito sim- ples de ser realizada. 22 O mesmo acontece quando usamos o argumento MIN(CAMPO) para valor mnimo. um excelente modo de obter dados importantes para a locadora. 23 O usurio no sabe o prprio codigo, mas no nada prtico procur-lo dentro de um banco de dados extenso como o de uma locadora em situao real, com mais de 500 clientes. 24 Ento, fazemos uma busca com o comando LIKE. Ele aceita determinados caracteres especiais, como %, que indica que qualquer espcie de texto pode estar no lugar. 08-13-Rev.indd 12 18/12/2007 16:09:13 geEk especial 13 GEEK ESPECIAL 25 Faa o mesmo para lmes, agora, ache algum que termine com de. Voc pode buscar %andrade% para procurar algum que tenha Andrade em um de seus sobrenomes, por exemplo. 26 Insira um novo lme para o cliente encontrado. Em vez de es- crever a data na qual o lme foi alugado, foi usada a referncia NOW(), que indica que o tempo a ser inserido o da data atual. 27 Ao utilizar a funo CONTAT(VALOR1, VALOR2, VALOR3, VALORN) possvel juntar um texto a outro, e se tal texto for um nmero, ele ser convertido para texto. 28 Agora, a verso nal com o preo j convertido para reais e mesclado com as outras tabelas. Fica a seu critrio colocar um ltro ou outros campos, como aluguel, que indiquem o status do lme. 29 Ao alterar a data do meu sistema, o banco de dados receber a nova data, logo, a funo NOW() retorna uma nova data, como visto na imagem. 30 Utilize a funo DATEDIFF para saber qual a diferena entre duas datas. uma forma de calcular eventuais multas por atraso. 08-13-Rev.indd 13 18/12/2007 16:09:14 MySQL 4 geEk especial Domine a lngua MySQL Uma abordagem terica-prtica sobre a linguagem de banco de dados mais usada no mundo O rganizar e agrupar parecem ser tendncias naturais do ser humano. Sempre procuramos manter a ordem e o equilbrio sobre todas as coisas ao nosso redor. Essa tcnica utilizada em quase todos os lugares por onde passamos. Olhe em sua volta: mesmo que no queira voc acaba de agrupar alguns elementos por cor, forma ou tamanho. Assim como os objetos fsicos, as informaes tambm podem ser agrupadas. Uma dona de casa procura em seu caderno o prato que mais possa agradar seus convidados. O caderno um banco cheio de informaes teis. Esse um belo exemplo de banco de dados, uma vez que informaes so conhecidas como dados, em informtica. Contudo, as informaes (principalmente em grande escala) no tm valor, se no houver alguma maneira de interagir com os dados adicionando novos registros, contando quantos registros de determinado valor existem, denindo classicao, como ordem alfabtica ou ltrando dados por um critrio. Essas funcionalida- des, que nos ajudam bastante no dia-a-dia, cam a cargo dos sistemas de bancos de dados. Claro que no existe apenas um tipo de sistema de banco de dados, diversas empresas produzem inmeros bancos de dados e disponibilizam, vendem ou mesmo alugam os sistemas. Os sistemas, em sua maioria, trabalham com uma linguagem em comum: SQL. Essa linguagem a mais usada por ser simples e de fcil aprendizado. Alm disso, os comandos dela so muito humanizados, o que a torna to popular. Mesmo quem no en- tende nada de informtica pode compreender facilmente certos comandos, como SELECT * FROM vendas ou, em portugus, selecione tudo das vendas. Um dos bancos de dados mais usados no mundo o MyS- QL, que ganhou fora por meio da Internet por se integrar a vrias linguagens de programao, como ASP, PHP, Perl ou Python. O MySQL tambm se comporta extremamente bem quando o assunto portabilidade. Ele funciona na maioria dos sistemas operacionais, como Linux, Windows, MacOS, entre outros. Tambm adquiriu preferncia por ser um sistema livre para desenvolvedores. Geralmente, o MySQL usado para sistemas na Internet em conjunto com a linguagem de programao PHP no servidor Apache rodando na plataforma Linux. Esse time de ferra- mentas conhecido como LAMP (Linux + Apache + MySQL + PHP). Sistemas de grande porte foram construdos com o LAMP, por exemplo, a Wikipdia. Mas isso no impede que o MySQL funcione em desktop tambm com o Delphi ou o VB por exemplo, alm de rodar perfeitamente sem o auxlio de qualquer interpretador. Neste tutorial, voc vai aprender a instalar, congurar e dar seus primeiros passos com o MySQL, criar um banco de dados, uma tabela e inserir e selecionar dados da mesma. Aps ler a revista, voc perceber que no h motivo para depender de programas que fazem tudo para facilitar e deixam cdigo sujo com inmeras funes que talvez no sejam teis, porque voc s precisa de aes simples. Aprendendo a linguagem do MySQL naturalmente, voc tambm aprende muitas funcionalidades de outros bancos de dados como o Postgree ou SQLite, j que todas essas linguagens se baseiam no padro SQL. Ento, arregace as mangas e mos obra! por Michael Granados 04-07-Rev.indd 4 18/12/2007 11:28:17 geEk especial 5 GEEK ESPECIAL 1 V at o site do MySQL (www.mysql.com) para efetuar o download do sistema de banco de dados que ser instalado no servidor. 2 Na rea de download, escolha seu sistema operacional para que o banco de dados se adapte perfeitamente ao local em que ser instalado. 3 Para Windows, existem trs verses: apenas o essencial, completa ou sem instalador, para que voc possa fazer a instalao na unha. Este tutorial utiliza a primeira verso. 4 Inicie a instalao normalmente e use as conguraes-pa- dro. A instalao do MySQL era complicada e sua congurao costumava ser feita no bloco de notas. Agora, tudo mais fcil. 5 Ao final da instalao, o sistema vai perguntar se voc deseja configurar o banco de dados. Deixe essa caixa marcada e conclua a instalao. 6 Automaticamente, o instalador lanar o congurador do MySQL. Veja, na imagem, a tela que voc deve visualizar a esta altura da atividade. 04-07-Rev.indd 5 18/12/2007 11:28:18 MySQL 6 geEk especial 7 Nesta tela, voc congura seu sistema operacional para utilizar o MySQL como servio, deixando como opo que ele se inicie junto ao Windows. 8 Dena uma senha para que o usurio root possa utilizar o banco de dados. Em sistemas de informtica, root o usurio prin- cipal que tem o controle sobre tudo o que ocorre no sistema. 9 Ao nal, o programa demonstra seu relatrio de processos: preparar a congurao; escrever o arquivo de congurao; ini- ciar o servio e aplicando as conguraes do banco de dados. 10 Inicie o prompt de comando do MySQL. Perceba que, se voc quiser congurar seu banco de dados novamente, poder fazer isso com a ferramenta de congurao contida neste mesmo menu. 11 A primeira coisa que voc deve fazer para comear a brin- car com o banco de dados entrar com a senha do root. Lembra daquela senha alguns passos atrs? 12 Depois de fazer o login, use o comando SHOW DATABASES para ver quais bancos de dados possvel utilizar para fazer novos projetos. 04-07-Rev.indd 6 18/12/2007 11:28:20 geEk especial 7 GEEK ESPECIAL 13 Com os comandos CREATE DATABASE <NOME DO BANCO> e USE <NOME DO BANCO>, respectivamente, crie um novo banco e passe a us-lo como referncia para os outros passos. 14 Com o CREATE TABLE, crie uma tabela de pessoas com suporte a dois fatores: nome e idade. Veja que para cada tipo de informao, utiliza-se um atributo. 15 Insira dados nesse banco. Veja que ocorreu um erro ao tentarmos alocar um texto no campo de valor inteiro. Logo, a escolha do tipo de dado importante. 16 Selecione as pessoas com o comando SELECT para saber quais delas existem na tabela. Na seqncia, foi usado um ltro chamado WHERE, para vericar as pessoas acima de 28 anos. 17 Para atualizar alguma informao, use o comando UPDATE, congurando valores com a diretiva SET. Especique onde aconte- cer essa atualizao no banco de dados com o ltro WHERE. 18 Para excluir dados, utilize o comando DELETE em conjunto com o ltro WHERE e o UPDATE. Para apagar tudo, use os comando DROP TABLE pessoas e DROP DATABASE michael. 04-07-Rev.indd 7 18/12/2007 11:28:21