Você está na página 1de 70

Modelo de Dados ................................................................................................................................... 4 Modelo Entidade-Relacionamento (MER) .............................................................................................. 5 Princpios Bsicos e Conceitos Gerais .................................................................................................... 5 Entidades e Atributos .............................................................................................................................

5 Relacionamento do Tipo Um para Um:................................................................................................... 5 Relacionamento do Tipo Um para Vrios: .............................................................................................. 6 Relacionamento do tipo Vrios para Vrios: ........................................................................................... 7 Integridade Referencial:.......................................................................................................................... 8 Normalizao de Tabelas:....................................................................................................................... 8 Primeira Forma Normal:......................................................................................................................... 9 Segunda Forma Normal:....................................................................................................................... 10 Terceira Forma Normal: ....................................................................................................................... 11 Roteiro para Normalizao de Dados.................................................................................................... 11 Etapas na estruturao de um banco de dados: ...................................................................................... 12 Dicas para determinao dos campos em uma tabela:............................................................................ 13 Como escolher o campo que ser a chave primria?.............................................................................. 14 SQL APOSTILA ............................................................................................................................... 14 A LINGUAGEM SQL.......................................................................................................................... 15 Vantagens e Desvantagens da linguagem SQL...................................................................................... 18 O que MySQL? ................................................................................................................................. 20 O que um banco de dados relacional?................................................................................................. 20 Instalando o banco de dados ................................................................................................................. 21 Instalando o MySQL no Linux ............................................................................................................. 21 Os comandos CREATE e DROP .......................................................................................................... 22 O comando CREATE ........................................................................................................................... 22 O comando USE................................................................................................................................... 23 O comando DROP................................................................................................................................ 23 Criando tabelas..................................................................................................................................... 24 O comando SHOW............................................................................................................................... 25 O comando DESCRIBE ....................................................................................................................... 25 IF NOT EXISTS: ................................................................................................................................. 25 Criando uma cpia de uma tabela ......................................................................................................... 25 Alterando o nome da coluna ................................................................................................................. 26 1

Alterando o tipo de coluna.................................................................................................................... 26 Renomeando uma tabela....................................................................................................................... 26 Excluindo / adicionando colunas e tabelas ............................................................................................ 26 Eliminando tabelas e colunas................................................................................................................ 26 Adicionando colunas ............................................................................................................................ 27 Adicionando colunas aps uma outra determinada ................................................................................ 27 Utilizando ndices................................................................................................................................. 27 Decidindo quais colunas incluir no ndice ............................................................................................. 27 Criando um ndice ................................................................................................................................ 27 Excluindo ndices ................................................................................................................................. 28 Tipos de tabelas.................................................................................................................................... 28 O tipo MyISAM ................................................................................................................................... 28 O tipo Memory..................................................................................................................................... 29 O tipo MERGE..................................................................................................................................... 30 O tipo BDB .......................................................................................................................................... 31 O tipo InnoDB...................................................................................................................................... 31 Alterando o tipo de uma tabela ............................................................................................................. 31 Tipo de dados....................................................................................................................................... 32 Tipos numricos ................................................................................................................................... 32 Modificadores AUTO_INCREMENT, UNSIGNED e ZEROFILL ....................................................... 33 AUTO_INCREMENT.......................................................................................................................... 33 UNSIGNED ......................................................................................................................................... 34 Tipos de caractere ou de dados de string ............................................................................................... 34 CHAR e VARCHAR............................................................................................................................ 35 TEXT e BLOB ..................................................................................................................................... 35 Tipos variados...................................................................................................................................... 36 Tipo SET.............................................................................................................................................. 36 Modificadores adicionais de coluna ...................................................................................................... 37 Tipos de data e hora.............................................................................................................................. 38 Sintaxe bsica da SQL.......................................................................................................................... 38 Comando INSERT ............................................................................................................................... 38 Comando SELECT............................................................................................................................... 39 Um outro caso, a clusula WHERE ...................................................................................................... 40 2

Algumas funes que trabalham com a instruo SELECT ................................................................... 41 Um caso a parte: a unio do INSERT INTO ... SELECT....................................................................... 42 Comando UPDATE.............................................................................................................................. 42 Comando DELETE .............................................................................................................................. 42 Trabalhando com Junes..................................................................................................................... 43 Chaves variadas do MySQL ................................................................................................................. 43 Chaves primrias.................................................................................................................................. 46 Chaves estrangeiras .............................................................................................................................. 46 Transaes ........................................................................................................................................... 46 Stored Procedures................................................................................................................................. 47 Criando um Stored Procedure com parmetros...................................................................................... 48 Criando Views ..................................................................................................................................... 49 Visualizando a estrutura de uma view................................................................................................... 49 Visualizando a criao da view............................................................................................................. 50 Excluindo uma view............................................................................................................................. 50 Criando Triggers (gatilhos)................................................................................................................... 50 Visualizando as triggers criadas............................................................................................................ 51 Administrando o MySQL ..................................................................................................................... 52 Confirmando o novo usurio ................................................................................................................ 53 Obtendo informaes com SHOW........................................................................................................ 53 Para visualizar todos os usurios existentes no seu MySQL execute;..................................................... 53 Ferramenta de modelagem de tabelas para uitlizao do MySql ............................................................ 54 Principais botes da ferramenta. ........................................................................................................... 55 Inicializando a confeco de tabelas. .................................................................................................... 58 Editing Options .................................................................................................................................... 59 DataBase Options:................................................................................................................................ 60 Relation Editor ..................................................................................................................................... 63 Conexo com o Banco de Dados e transferncia das tabelas.................................................................. 64 DataBase Synchronisacion ................................................................................................................... 67 Incluir, excluir e alterar os dados da tabela............................................................................................ 68

Modelo de Dados
O Modelo de Dados uma descrio dos tipos de informaes que esto armazenadas em um banco de dados ou a descrio formal da estrutura de um banco de dados. Para construir um modelo de dados, usa-se uma linguagem de modelagem de dados. Linguagens de modelagem de dados podem ser classificadas de acordo com a forma de apresentar modelos, em linguagens textuais ou grficas. Cada apresentao do modelo recebe a denominao de Esquema de Banco de Dados. No projeto de banco de dados, normalmente so considerados dois nveis de abstrao de modelos de dados, o do modelo conceitual e o do modelo lgico.

Modelo Conceitual: So modelos que contm uma descrio do banco de dados de forma independente de implementao em um SGBD. O modelo conceitual registra que dados devem aparecer no banco de dados, mas no registra como estes dados esto armazenados a nvel de SGBD. A tcnica mais difundida de modelagem conceitual e a abordagem entidade-relacionamento (ER). Nessa tcnica, um modelo conceitual usualmente representado atravs de um diagrama, chamado de diagrama ou modelo entidade-relacionamento (DER / MER).

Modelo Lgico: So modelos que representam esquematicamente as estruturas das tabelas de forma bastante prxima existente fisicamente. Basicamente so apresentados os registros de cada tabela (inclusive seus campos) e seus relacionamentos elementares. O Modelo Relacional, o Modelo de Rede e o Hierrquico so exemplos deste tipo de representao. O modelo lgico dependente do tipo particular de SGBD que est sendo usado. So vistos pelos DBAs e pelos programadores. O conceito de instncia, sempre muito presente, poderia ser definido como sendo o conjunto de dados que definem claramente um Banco de Dados em determinado instante. Devemos entender ento o Banco de Dados como sendo no apenas um conjunto de dados digitados, mas tambm todo o esquema e regras armazenados e controladas pelo SGBD.

Modelo Entidade-Relacionamento (MER)


O MER consiste em um conjunto de objetos bsicos chamados entidades e nos relacionamentos entre esses objetos. Ele foi desenvolvido para facilitar o projeto de banco de dados permitindo a especificao de um esquema de empresa. Tal esquema representa a estrutura lgica geral do banco de dados.

Princpios Bsicos e Conceitos Gerais


A prtica da Modelagem de Dados requer a compreenso de alguns conceitos bsicos, sem os quais seria impossvel a correta identificao das caractersticas dos dados alvo da anlise e determinao dos critrios mais adequados para a sua organizao. A seguir, so descritos os conceitos e o vocabulrio relacionado Modelagem de Dados.

Entidades e Atributos
Correspondem a quaisquer objetos do mundo real sobre os quais se deseja armazenar informaes. So exemplos tpicos de entidades: funcionrio, empresa, produto, pedido, cliente, etc. Dada uma entidade que seja de nosso interesse, precisaremos guardar suas informaes mais relevantes, de maneira que possamos descrev-la com preciso sempre que necessrio. Chamamos de atributos (ou propriedades) a esse conjunto de informaes que descrevem uma entidade. Dessa forma, os atributos de um funcionrio poderiam ser o seu Nome, Nmero de Matrcula, Cargo, Sexo, Salrio, Data de Admisso, etc. Analogamente, os atributos de um produto seriam o seu Cdigo, Descrio, Fornecedor, Unidade de Medida, etc. Uma entidade geralmente contm informaes relativas a vrias instncias dela mesma. Por exemplo, a entidade FUNCIONRIO contm informaes de todos os funcionrios da empresa, e no apenas de um deles; a entidade PRODUTO armazena os atributos de todos os produtos com os quais a empresa trabalha, etc. Dizemos ento que uma entidade tem ocorrncias. Cada um dos funcionrios sobre os quais guardamos informaes na entidade FUNCIONRIO uma de suas ocorrncias.

Relacionamento do Tipo Um para Um:


Esta relao existe quando os campos que se relacionam so ambos Chaves Primrias em suas respectivas tabelas. Cada um dos campos no apresenta valores repetidos. Na prtica existem poucas situaes onde utilizaremos um relacionamento deste tipo.

Um exemplo poderia ser o seguinte: Imagine uma escola com um Cadastro de Alunos na tabela Alunos, destes apenas uma pequena parte participa da Banda da Escola. Por questes de design do Banco de Dados, podemos optar por criar uma Segunda Tabela "Alunos da Banda", a qual pode se relacionar com a Tabela Alunos atravs de um relacionamento Um para Um. Cada aluno somente cadastrada uma vez na Tabela Alunos e uma nica vez na Tabela Alunos da Banda. Poderamos utilizar o Campo Matrcula do Aluno como o Campo que relaciona as duas Tabelas. Na Tabela Alunos da Banda poderamos colocar apenas o Nmero da Matrcula do aluno, alm das informaes a respeito do Instrumento que ele toca, tempo de banda, etc. Quando fosse necessrio buscar as informaes tais como nome, endereo, etc, as mesmas podem ser recuperadas atravs do relacionamento existente entre as duas tabelas, evitando, com isso, que a mesma informao ( Nome, Endereo, etc) tenha que ser duplicada nas duas tabelas, inclusive aumentando a probabilidade de erros de digitao. Na Prxima Figura vemos o exemplo de um Relacionamento do tipo Um para Um entre as tabelas Alunos e Alunos da Banda.

Relacionamento Um para Um entre as Tabelas Alunos e Alunos da Banda.

Relacionamento do Tipo Um para Vrios:


Este, com certeza, o tipo de relacionamento mais comum entre duas tabelas. Uma das tabelas (o lado um do relacionamento) possui um campo que a Chave Primria e a outra tabela (o lado vrios) se relaciona atravs de um campo cujos valores relacionados podem se repetir vrias vezes. Considere o exemplo entre a tabela Clientes e Pedidos. Cada Cliente somente cadastrada uma nica vez ( por isso o campo Cdigo do Cliente uma chave primria, indicando que no podem existir dois clientes com o mesmo cdigo), portanto a tabela Clientes ser o lado um do relacionamento. Porm cada cliente pode fazer diversos pedidos, por isso que o Cdigo de um Cliente poder aparecer vrias vezes na tabela Pedidos, tantas 6

vezes quantos forem os pedidos que o Cliente tiver feito. Por isso que temos um relacionamento do tipo Um para Vrios entre a tabela Clientes e Pedidos, atravs do campo Cdigo do Cliente, indicando que um mesmo Cliente pode realizar diversos pedidos. Na prxima figura vemos um exemplo de um Relacionamento Um para Vrios entre as Tabelas Clientes e Pedidos, atravs do campo cdigo do cliente:

Relacionamento Um para Vrios entre as Tabelas Clientes e Pedidos. Observe que o lado Vrios do relacionamento representado pelo smbolo do infinito ( ). No lado Um do relacionamento o campo definido como uma Chave Primria ( Campo CdigoDoCliente na tabela Clientes) e no lado Vrios no ( campo CdigoDoCliente na tabela Pedidos), indicando que no lado vrios o Cdigo do Cliente pode se repetir vrias vezes, o que faz sentido, uma vez que um mesmo cliente pode fazer diversos pedidos.

Relacionamento do tipo Vrios para Vrios:


Seria uma situao onde em ambos os lados do relacionamento os valores poderiam se repetir. Vamos considerar o caso entre Produtos e Pedidos. Posso ter Vrios Pedidos nos quais aparece um determinado produto, alm disso vrios Produtos podem aparecer no mesmo Pedido. Esta uma situao em que temos um Relacionamento do Tipo Vrios para Vrios. Na prtica no temos como implementar um relacionamento deste tipo, devido a uma srie de problemas que teramos. Por exemplo, na tabela Pedidos teramos que repetir o Nmero do Pedido, Nome do Cliente, Nome do Funcionrio, Data do Pedido, etc para cada item do Pedido. Para evitar este tipo de problema bastante comum quebrarmos um relacionamento do tipo Vrios para Vrios em dois relacionamento do tipo Um para Vrios. Isso feito atravs da criao de uma nova tabela, a qual fica com o lado Vrios dos relacionamentos.

Na figura abaixo temos a representao dos dois relacionamentos Um para Vrios:

Tabela Detalhes do Pedido ficou com o lado Vrios dos Relacionamentos.

Esta situao em que um relacionamento um para Vrios "quebrado" em dois Relacionamentos do tipo Um para Vrios bastante comum. Diversas vezes utilizamos esta tcnica para eliminar uma srie de problemas no Banco de Dados, tais como informao repetida e inconsistncia de Dados.

Integridade Referencial:
A Integridade Referencial Utilizada para garantir a Integridade dos dados entre as Tabelas Relacionadas. Por exemplo, existe um Relacionamento do tipo Um para Vrios entre a Tabela Clientes e a Tabela Pedidos (Um Cliente pode Fazer vrios pedidos ). Com a Integridade Referencial, no permite que seja cadastrado um Pedido para um Cliente ainda no Cadastrado. Tambm podemos garantir o seguinte: Quando o Cdigo de um cliente for alterado na Tabela Clientes, podemos pedir para o SGBD que ele atualize, automaticamente, todos os Cdigos do Cliente na Tabela Pedidos, de tal maneira que no fiquem Registros rfos, isto , registros de Pedidos com um Cdigo de Cliente que no existe mais na Tabela Clientes. Essa ao conhecida como "Propagar atualizao dos campos relacionados". Quando um Cliente for excludo da Tabela Clientes, podemos pedir para que o SGBD exclua, na tabela Pedidos, todos os Pedidos para o Cliente que est sendo Excludo.

Normalizao de Tabelas:
O conceito de Normalizao foi introduzido por Codd em um artigo sobre o Modelo Relacional em 1970. O objetivo da normalizao evitar os problemas provocados por falhas no Projeto do Banco de Dados, bem como eliminar a mistura de assuntos e as correspondentes redundncias de dados. 8

Uma Regra de Ouro que devemos observar quando do Projeto de Banco de Dados a de "No Misturar assuntos em uma mesma Tabela". Por exemplo na Tabela Clientes devemos colocar somente campos relacionados com o assunto Clientes. No devemos misturar campos relacionados com outros assuntos, tais como Pedidos, Produtos, etc. Essa "Mistura de Assuntos" em uma mesma tabela acaba por gerar repetio desnecessria dos dados bem como inconsistncia dos mesmos. O Processo de Normalizao aplica uma srie de Regras sobre as Entidades de um Banco de Dados, para verificar se as mesmas esto corretamente projetadas. Embora existam 5 formas normais ( ou regras de Normalizao ), na prtica usamos um conjunto de 3 Formas Normais. Normalmente aps a aplicao das Regras de Normalizao, algumas tabelas acabam sendo divididas em duas ou mais tabelas, o que no final acaba gerando um nmero maior de tabelas do que o originalmente existente. Este processo causa a simplificao dos atributos de uma tabela, colaborando significativamente para a estabilidade do modelo, reduzindo-se consideravelmente as necessidades de manuteno. Vamos entender o Processo de Normalizao na Prtica, atravs de exemplos.

Primeira Forma Normal:


Uma relao est na 1FN se somente todos os domnios bsicos contiverem somente valores atmicos (no contiver grupos repetitivos). Para atingir esta forma normal devemos eliminar os grupos de repetio. Como? Procedimentos: a) Identificar a chave primria da entidade; b) Identificar o grupo repetitivo e exclu-lo da entidade; c) Criar uma nova entidade com a chave primria da entidade anterior e o grupo repetitivo. A chave primria da nova entidade ser obtida pela concatenao da chave primria da entidade inicial e a do grupo repetitivo. Abaixo temos um exemplo de como efetuar a normalizao para a primeira forma normal:

No normalizada

Normalizada usando a primeira forma normal (1FN) 9

Segunda Forma Normal:


Ocorre quando a chave Primria composta por mais de um campo. Neste caso, devemos observar se todos os campos que no fazem parte da chave de pendem de todos os campos que compem a chave. Se algum campo depender somente de parte da chave composta, ento este campo deve pertencer a outra tabela. Observe o Exemplo Indicado na Tabela da Figura abaixo:

Tabela com uma Chave Primria Composta. No est Na Segunda Forma Normal.

A Chave Primria Composta formada pela combinao dos Campos "NmeroDaMatrcula" e "CdigoDoCurso". O Campo Avaliao depende tanto do CdigoDoCurso quanto do NmeroDaMatrcula, porm o campo DescrioDoCurso, depende apenas do CdigoDoCurso. Com isso temos um campo que no faz parte da Chave Primria e Depende apenas de um dos campos que compem a chave Primria, por isso que dizemos que esta tabela no est na Segunda Forma Normal. A Resoluo para este problema tambm simples: "Dividimos a Tabela que no est na Segunda Forma Normal em duas outras tabelas, conforme indicado pela figura abaixo, sendo que as duas tabelas resultantes esto na Segunda Forma Normal.

Informaes sobre Avaliaes e Cursos em Tabelas Separadas.

OBS -> A Distino entre a Segunda e a Terceira forma normal, que veremos mais adiante, muitas vezes confusa. A Segunda Forma normal, na maioria das vezes, est ligada a ocorrncia de Chaves Primrias compostas. 10

Terceira Forma Normal:


A relao deve estar em 2FN e no devem existir dependncias funcionais transitivas, ou seja, atributos no-chave que dependem de outros atributos que no fazem parte de alguma chave da relao. Quando isto ocorre, dizemos que a tabela no est na Terceira Forma Normal, conforme indicado pela tabela da figura abaixo:

Tabela com um Campo dependente de Outro campo que no a Chave Primria. No est na Terceira Forma Normal.

Observe que o Campo DescrioDoCurso depende apenas do Campo CdigoDoCurso, o qual no faz parte da Chave Primria. Por isso dizemos que esta tabela no est na terceira forma normal. Para Solucionar este problema, a soluo tambm simples. Novamente basta dividir a tabela em duas outras, conforme indicado pela figura abaixo. As duas tabelas resultantes esto na Terceira Forma Normal.

Tabelas Resultantes que esto na Terceira Forma Normal. Com isso podemos concluir que como resultado do Processo de Normalizao, iremos obter um nmero maior de tabelas, porm sem problemas de redundncia e inconsistncia dos dados.

Roteiro para Normalizao de Dados


Desmembrar a tabela em uma ou mais tabelas sem grupos repetitivos de itens. Designar um ou mais atributos como Chave Primria das novas entidades. Estabelecer o relacionamento e a cardinalidade entre as novas entidades geradas e a entidade geradora. 11

Verificar a questo da variao temporal de certos atributos e criar relacionamento 1:N entre a entidade original e a entidade criada por questes de histrico Verificar a existncia de atributos parcialmente dependentes da chave. Criar novas entidades, que absorvero os atributos com dependncia funcional parcial, herdando a chave parcial. Estabelecer o relacionamento e a cardinalidade entre as novas entidades geradas e a entidade geradora. Verificar se no existem atributos dependentes de outros atributos no-chave. Destacar atributos dependentes de uma chave estrangeira e incorporar na tabela da chave estrangeira ou cri-las, se no existir. Eliminar os atributos obtidos por clculos a partir de outro atributos da mesma tabela.

Etapas na estruturao de um banco de dados:


Determinar qual o objetivo do banco de dados. Isto ajuda na determinao de quais os dados devem ser armazenados. Determinar as tabelas necessrias. Aps definirmos o Objetivo do Banco de Dados, as informaes devem ser definidas e separadas em assuntos diferentes, tais como "Clientes", "Empregados", "Pedidos", pois cada um ir compor uma tabela no banco de dados. Determinar os Campos Necessrios. Definir quais informaes devem ser mantidas em cada tabela. Por exemplo, a tabela Clientes poderia ter um campo para o Cdigo Do Cliente, outro para o Nome Do Cliente e assim por diante. Determinar quais campos sero as Chaves Primrias. Determinar, em cada tabela, quais campos sero utilizados como Chave Primria. Esta uma etapa importante para a definio dos Relacionamentos que vem a seguir. Determinar os Relacionamentos. Decidir como os dados de uma tabela se relacionam com os dados de outras tabelas. Por exemplo, Clientes podem Fazer Vrios Pedidos. Fornecedores podem fornecer Vrios Produtos, etc. Refinar a Estrutura do Banco de Dados. Antes de inserir muitos dados, ou at mesmo antes de inserir qualquer dado, verificar se a estrutura contm erros, isto , verificar se os resultados obtidos so os desejados. Isto, normalmente, pode ser obtido atravs do processo de Normalizao. Caso necessrio, deve-se alterar a estrutura do banco de dados. Com uma boa estrutura, gasta-se menos tempo na construo e manuteno do banco de dados e, ao mesmo tempo, assegura-se resultados mais rpidos e precisos. 12

Dicas para determinao dos campos em uma tabela:


Relacionar diretamente cada campo ao assunto da tabela. Se um campo descreve o assunto de uma tabela diferente, este campo deve pertencer a outra tabela. O mesmo acontece quando uma informao se repete em diversas tabelas. Este um indcio de que existem campos desnecessrios em algumas tabelas. No Incluir dados Derivados ou Calculados. No recomendado armazenar o resultado de clculos nas tabelas. O correto que o clculo seja executado quando necessitarmos do resultado. Incluir todas as informaes necessrias. Como fcil esquecer informaes importantes, deve-se ter em mente todas as informaes coletadas desde o incio do processo e perguntar se com elas possvel obter todas os resultados desejados. Armazenar todas as informaes separadamente. Existe uma tendncia em armazenar informaes em um nico campo. Por exemplo, o nome do curso e o tempo de durao em um mesmo campo. Como as duas informaes foram combinadas em um nico campo, ficar difcil conseguir um relatrio classificado pelo tempo de durao dos cursos.

13

Como escolher o campo que ser a chave primria?


Um bom Sistema Gerenciador de Banco de Dados (SGBD) aquele que encontra e nos fornece, rapidamente, todas as informaes necessrias que nele estejam armazenadas, mesmo em diferentes tabelas. Para que isto seja possvel necessrio incluir um campo ou conjunto de campos que identifiquem de um modo nico cada registro de uma tabela. Esta informao chamada Chave Primria. Deve-se ter certeza que este campo (ou conjunto de campos) seja sempre diferente para cada registro, por no ser permitido valores duplicados em um campo de chave primria. Ao escolher campos de Chave Primria, considere os seguintes detalhes: No permitida duplicidade de valores ou nulos (informaes desconhecidas). Caso no exista um identificador nico para uma determinada tabela, pode-se usar um campo que numere os registros seqencialmente. Pode-se utilizar o valor deste campo para encontrar registros. O tamanho da chave primria afeta a velocidade das operaes, portanto, para um melhor desempenho, devemos utilizar o menor tamanho que acomode os valores necessrios para armazenar no campo.

SQL APOSTILA
INTRODUO Uma linguagem de consulta a linguagem por meio da qual os usurios obtm informaes do banco de dados. Essas linguagens so, tipicamente, de nvel mais alto que as linguagens de programao tradicionais. As linguagens de consulta podem ser categorizadas como procedurais ou no-procedurais. Em uma linguagem procedural, o usurio deve "ensinar" ao sistema a realizao de uma seqncia de operaes no banco de dados para obter o resultado desejado. Em uma linguagem no-procedural, o usurio descreve a informao desejada sem fornecer um procedimento especfico para a obteno dessas informaes. Os sistemas de banco de dados comerciais oferecem uma linguagem de consulta que incorpora elementos de ambos os enfoques: procedurais e no-procedurais. Linguagens "puras": a lgebra relacional procedural, enquanto o clculo relacional de uma tupla e o clculo relacional de um domnio so no-procedurais. Essas linguagens de consulta so concisas e formais, sem "o acar sinttico" das linguagens comercias, mas ilustram as tcnicas fundamentais para a extrao de dados do banco de dados.

14

A LINGUAGEM SQL
O nome "SQL" significa "Structured Query Language" - Linguagem Estruturada de Pesquisa. Essa linguagem, de grande utilizao, teve seus fundamentos no modelo relacional de Codd (1970). Sua primeira verso recebeu o nome de SEQUEL ("Structured English Query Language"), sendo definida por D. D. CHAMBERLIN, entre outros, em 1974, nos laboratrios de pesquisa da IBM (Califrnia). Em 1975, foi implementado um prottipo de aplicao dessa nova linguagem. Entre 1976 e 1977, o SEQUEL foi revisado e ampliado, e teve seu nome alterado para "SQL" por razes jurdicas. Com esta reviso foi posto em prtica um projeto ambicioso da IBM chamado System R. Novas alteraes foram introduzidas na SQL, graas s idias apresentadas pelos diversos usurios do ambiente. Devido ao sucesso dessa nova forma de consulta e manipulao de dados, dentro de um ambiente de banco de dados, a utilizao da SQL foi se tornando cada vez maior. Com isso uma grande quantidade de SGBD's foi tendo como linguagem bsica a SQL - SQL/DS e DB2 da IBM, ORACLE da Oracle Corporation, RDB da Digital, SYBASE da Sybase INC, e Microsoft SQL ServerTM, entre outros. A SQL se tornou um padro de fato, no mundo dos ambientes de banco de dados relacionais. Bastava agora se tornar de direito. Ento, em 1982, o American National Standard Institute (ANSI) tornou a SQL padro oficial de linguagem em ambiente relacional. Infelizmente, como todo padro que se preze, existem hoje vrios dialetos SQL, cada um, evidentemente, tentando ser mais padronizado que o outro. O modelo relacional constitudo basicamente de tabelas, cada qual contendo linhas (registros, tuplas) e colunas. Os registros na tabela no so ordenados e sua localizao se faz por meio de um campo-chave, ou seja, um campo que assume o papel de chave primria da tabela. por intermdio dessa chave que se identifica uma, e somente uma, ocorrncia do valor contido no campo. Uma das razes da popularidade dos sistemas relacionais a sua facilidade de manipulao e entendimento. A linguagem SQL foi desenvolvida especialmente para o ambiente relacional, podendo ser adaptada a qualquer ambiente no relacional.

15

A idia original da SQL s previa seu uso de forma interativa. Aps sofrer alguns acrscimos, ela passou tambm a ter capacidade de ser utilizada em linguagens hospedeiras, tais como: COBOL, FORTRAN, "C", etc. Atualmente, a linguagem SQL assume um papel muito importante nos sistemas de gerenciamento de banco de dados, podendo ter muitos enfoques, como apresenta a figura: Linguagem interativa de consulta (query AdHoc)- Por meio de comandos SQL, os usurios podem montar consultas poderosas sem a necessidade da criao de um programa, podendo utilizar Forms ou ferramentas de montagem de relatrio; Linguagem de programao para acesso a banco de dados - Comandos SQL embutidos em programas de aplicao que acessam os dados armazenados; Linguagem de administrao de banco de dados - O responsvel pela administrao do banco de dados (DBA) pode utilizar comandos SQL para realizar suas tarefas; Linguagem cliente/servidor - Os programas (cliente) dos computadores pessoais usam comandos SQL para se comunicarem por meio de uma rede local, compartilhando os dados armazenados em um nico local (servidor). A arquitetura cliente/servidor minimiza o trfego de dados pela rede; Linguagem para banco de dados distribudo - A SQL auxilia na distribuio dos dados por meio de vrios ns conectados ao sistema de computao. Auxilia tambm na comunicao de dados com outros sistemas;

16

Caminho de acesso a outros bancos de dados em diferentes mquinas - A SQL auxilia na converso entre diferentes produtos de banco de dados colocados em diferentes mquinas (de micro at mainframe). Por ser uma linguagem de numerosas aplicaes, a SQL pode manipular objetos de diferentes classes entre as funes de um SGBD:

Definio de dados (DDL) - permite ao usurio a definio da estrutura e organizao dos dados armazenados, e as relaes que existem entre eles; Manipulao de dados (DML) - permite ao usurio ou a um programa de aplicao, a incluso, remoo, seleo ou atualizao de dados previamente armazenados no banco; Controle de acesso - protege os dados de manipulaes no autorizadas; Compartilhamento de dados - coordena o compartilhamento dos dados por usurios concorrentes, sem contudo interferir na ao de cada um deles; Integridade dos dados - auxilia no processo de definio da integridade dos dados, protegendo contra corrupes, inconsistncias e falhas do sistema de computao

17

Vantagens e Desvantagens da linguagem SQL


Com o uso e a padronizao da SQL, algumas vantagens so diretas: Independncia de fabricante - A SQL oferecida em praticamente todos os SGBD's, e os que ainda no tm esto se encaminhando para l. Com isso posso mudar de SGBD sem me preocupar com o novo que vai chegar; Portabilidade entre computadores - A SQL pode ser utilizada desde um computador pessoal, passando por uma estao de trabalho, at um computador de grande porte; Reduo dos custos com treinamento - Baseado no item anterior, as aplicaes podem se movimentar de um ambiente para o outro sem que seja necessria uma reciclagem da equipe de desenvolvimento; Ingls estruturado de alto nvel - A SQL formada por um conjunto bem simples de sentenas em ingls, oferecendo um rpido e fcil entendimento; Consulta interativa - A SQL prov um acesso rpido aos dados, fornecendo respostas ao usurio, a questes complexas, em minutos ou segundos; Mltiplas vises dos dados - A SQL permite ao criador do banco de dados levar diferentes vises dos dados a diferentes usurios; Definio dinmica dos dados - Por meio da SQL, podem-se alterar, expandir ou incluir, dinamicamente, as estruturas dos dados armazenados com a mxima flexibilidade; Apesar de todas essas vantagens, algumas crticas so dirigidas SQL: A padronizao leva a uma, natural, inibio da criatividade, pois quem desenvolve aplicaes fica preso a solues padronizadas, no podendo sofrer melhorias ou alteraes; Mesmo enfrentando alguns problemas e crticas, a linguagem SQL veio para ficar, auxiliando de forma bastante profunda a vida dos usurios e analistas no trabalho de manipulao dos dados armazenados em um banco de dados relacional. E sobre esse auxlio que iremos tratar, mostrando comandos e funcionalidades da SQL, por meio de exemplos prticos. No iremos mostrar todos os comandos, principalmente os que foram definidos para serem utilizados dentro de uma linguagem hospedeira (cursor); apresentaremos os comandos para criao, atualizao, alterao, pesquisa e eliminao de tabelas dentro de um ambiente relacional tpico.

18

Uma instruo SQL consiste em trs partes: As declaraes de parmetros A instruo manipulativa As declaraes de opes Vejamos na tabela abaixo um resumo das clusulas manipulativas e suas finalidades: Instruo SELECT UPDATE DELETE FROM INSERT INTO Funo Obtm um grupo de registros e insere os registros em um dynaset ou em uma tabela Define os valores dos campos de uma tabela em uma atualizao. Remove registros de uma tabela. Acrescenta um grupo de registros a uma tabela.

Vejamos alguns exemplos da instruo SELECT: 1) Seleciona os campos "Primeiro nome" e "Sobrenome" de todos os registros da tabela Empregados. SELECT [Primeiro nome], [Sobrenome] FROM Empregados 2) Seleciona todos os campos da tabela Empregados. Note o uso parmetro (*) indicando todos os campos da tabela indicada. SELECT Empregados.* FROM Empregados 3) Conta o nmero de registros que tm uma entrada no campo "Cdigo postal" e coloca o ttulo Contagem no topo da coluna. SELECT Count([Cdigo postal]) AS Contagem FROM Clientes 4) Seleciona os campos "Primeiro nome" e "Sobrenome" de cada registro cujo sobrenome seja Pereira. SELECT [Primeiro nome], [Sobrenome] FROM Empregados WHERE [Sobrenome] = 'Pereira' 5) Seleciona os campos "Primeiro nome" e "Sobrenome" para Empregados cujos sobrenomes comeam pela letra S. SELECT [Primeiro nome], [Sobrenome] FROM Empregados WHERE [Sobrenome] Like 'S*' Observaes: FROM Indica as tabelas utilizadas como fonte de dados. WHERE Especifica as condies que os registros devem satisfazer para compor o subconjunto de dados.

19

O que MySQL?
MySQL um sistema de gerenciamento de banco de dados relacional, multiencadeado, de cdigo-fonte aberto e nvel corporativo. O MySQL foi desenvolvido por uma empresa de consultoria na Sucia chamada inicialmente de TcX, depois, com a popularidade do MySQL, passou a se chamar MySQL AB. Seu desenvolvimento ocorreu quando estavam precisando de um sistema de banco de dados que fosse extremamente rpido e flexvel. Foi, assim ento, que eles criaram o MySQL, que vagamente baseado em outro sistema de gerenciamento de banco de dados chamado de mSQL. O MySQL rpido, flexvel e confivel. utilizado em muitos lugares por todo o mundo. Obs.: A propsito, parte ''AB'' do nome da companhia o acrnimo para a palavra sueca ''aktiebolag'', ou ''sociedade annima''. Ela traduzida para ''MySQL, Inc.'' De fato, MySQL Inc. e MySQL GmbH so exemplos de subsidirias da MySQL AB. Elas esto localizadas nos EUA e Alemanha, respectivamente.

O que um banco de dados relacional?


Um banco no mundo de cimento e tijolo o lugar onde guardamos dinheiro. Um banco de dados tambm guarda, s que neste caso so dados. Chamamos de dados tudo que possamos inserir no computador, nmeros, letras, caracteres, imagens e etc. Um banco de dados relacional uma composio de tabelas e colunas que se relacionam entre si. Esses relacionamentos so baseados em um valor-chave que contido em cada tabela, em uma coluna.

20

Instalando o banco de dados


O MySQL tem diferentes formas de instalao quando se trata de sistemas operacionais. No caso do Windows, voc pode baixar a ltima distribuio atravs do site: http://www.mysql.com/downloads. Instalando no Windows Procure pelo formato executvel. O arquivo vem compactado no formato .zip. Descompacte e instale. A instalao, como no poderia deixar de ser, feita por um assistente. Siga os passos at a finalizao. Caso sua mquina tenha o sistema operacional Windows pertencente famlia NT (NT, 2000 ou XP), o MySQL instalado como servio. Ento basta iniciar ou parar o servio, encontrado no Painel de Controle > Ferramentas Administrativas>Servios. Voc tambm pode utilizar o comando pelo prompt, desde que voc saiba o nome do servio do seu MySQL: Para iniciar o servio net start mysql Para parar o servio net stop mysql

Instalando o MySQL no Linux


O MySQL Server pode ser instalado no Linux de vrias formas. A forma recomendada a que est em formato RPM. Voc deve baixar dois arquivos para instalar o MySQL na sua mquina. Esses arquivos so: MySQL-server-[verso].i386.rpm para instalar o servidor mysqld no Linux MySQL-client[verso].i386.rpm para instalar o cliente mysql para executar os comandos no Linux. A instalao poder ser feita atravs do comando rpm, no Shell do seu Linux. Um exemplo seria: Shell> rpm ivh MySQL-server-5.0.1.i386.rpm MySQL-client-5.0.1.i386.rpm A verso RPM j vem com pr-configuraes e assim que ocorrer a instalao, para iniciar ou parar o servidor, a seguinte sintaxe poder ser feita: Shell>/etc/init.d/./mysql start para iniciar o servidor MySQL Shell>/etc/init.d/./mysql stop para parar o servidor MySQL 21

Acessando o banco de dados MySQL No Windows Se voc estiver usando o sistema operacional Windows e utilizou a instalao padro do programa, abra o prompt de comando e digite a seqncia: cd\mysql\bin Lembrando que voc deve estar no drive em que o MySQL est instalado. Por padro voc o instala no drive C. Digitando o comando a seguir voc entra no MySQL. mysql u root -p Tecle ENTER e receber o pedido de senha: password Digite a senha que voc configurou na instalao e tecle ENTER novamente. Nota: Verses mais modernas do MySQL para o sistema operacional Windows no necessitam de tantos passos para iniciar, bastando ir at o atalho encontrado no menu Iniciar do sistema e no atalho do MySQL iniciar o prompt de comando encontrado neste local.

No Linux Se voc utilizou a instalao binria, em rpm (recomendado), basta abrir o terminal e digitar a seqncia: shell>mysql u root Se j estiver logado como root, no seu sistema operacional, no h necessidade de colocar o u root depois do comando mysql.

Os comandos CREATE e DROP


Quando pensar nos comandos CREATE e DROP, voc deve imaginar equipamentos de terraplanagem, caminhes basculantes e guindastes, porque so ferramentas que voc utiliza para criar o seu banco de dados. Esses comandos, embora raramente utilizados, so os mais importantes.

O comando CREATE
H muitas maneiras diferentes de criar banco de dados no MySQL. Ao criar um banco de dados, voc normalmente ter o layout inteiro pronto. Normalmente adicionaria as tabelas imediatamente depois de criar o 22

banco de dado, mas, teremos uma etapa por vez. A primeira etapa para criar um banco de dados no MySQL inserir o comando CREATE DATABASE nome_banco_de_dados da SQL (Structured Query Language) no monitor MySQL, onde nome_banco_de_dados o nome do banco de dados que voc est criado. No prompt de comando, no monitor do MySQL, insira o seguinte comando: mysql> CREATE DATABASE livraria;

Note que no foi utilizado acentuao e em casos de palavras compostas no insira espaos, se for o caso insira sublinhado _ .

O comando USE
Depois de confirmado a criao do banco de dados, voc dever utilizar o comando USE para utilizar o banco de dados livraria. USE livraria; Um ponto importante que o MySQL no torna ativo o banco de dados que voc criou, isso deve ser implcito.

O comando DROP
O comando DROP semelhante ao comando CREATE. Enquanto o ltimo cria um banco de dados, o primeiro exclui. O comando DROP do SQL imperdovel. No h caixas de confirmao para ver se voc tem certeza. Este comando exclui o banco de dados e tudo o que estiver nele. s ir at o prompt de comando e no monitor do MySQL e digitar: mysql> DROP DATABASE livraria; Isso excluir o banco de dados livraria e tudo o que estiver nele.

23

Criando tabelas
Criar tabela no MySQL uma tarefa relativamente fcil. Para se criar uma tabela basta usar a seqncia: shell>mysql u root Aps estar no monitor do MySQL digite a seguinte seqncia: mysql> CREATE DATABASE livraria; mysql> USE livraria; mysql> CREATE TABLE autores( -> autor_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> nome VARCHAR(100), -> dt_nasc DATE);

mysql> CREATE TABLE editora( -> editora_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> editora_nome VARCHAR(100) -> );

mysql> CREATE TABLE publicacao( -> isbn CHAR(13), -> autor_id INT UNSIGNED, -> editora_id INT UNSIGNED -> ); mysql> CREATE TABLE livros( -> isbn CHAR(13) NOT NULL PRIMARY KEY, -> titulo VARCHAR(50), -> edicao_num TINYINT(2), -> ano_publicacao YEAR, -> descricao TEXT);

24

O comando SHOW
Assim que criada sua primeira tabela. Para ver o resultado basta digitar a seqncia: SHOW TABLES FROM livraria; Para ver as colunas que existem na sua tabela digite: SHOW COLUMNS FROM livros; Ou DESCRIBE.

O comando DESCRIBE
Se preferir, o comando DESCRIBE faz a mesma coisa que SHOW, mostrando as colunas existentes em sua tabela. DESCRIBE livros; Ou simplesmente: DESC livros;

IF NOT EXISTS:
Uma maneira de se ter certeza de se no est criando uma tabela novamente fazer o comando IF NOT EXISTS: mysql> CREATE TABLE IF NOT EXISTS livros( -> isbn CHAR(13) NOT NULL PRIMARY KEY, -> titulo VARCHAR(50), -> edicao_num TINYINT(2), -> ano_publicacao YEAR, -> descricao TEXT);

Criando uma cpia de uma tabela


A partir da verso 4.1 voc pode copiar uma tabela com sua estrutura da seguinte maneira: CREATE TABLE copia_livros LIKE livros; Alterando tabelas existentes 25

Agora que voc criou a sua tabela o que aconteceria se voc precisasse alterar algo que fez? Confira os seguintes exemplos para alterar o nome da tabela, tipo de dados e o nome da coluna:

Alterando o nome da coluna


ALTER TABLE copia_livros CHANGE titulo titulo_do_livro VARCHAR(50); DESC copia_livros; # descreva as colunas de clientes Nota: # (sustenido) o inicio de um comentrio e no interfere em uma execuo de comando.

Alterando o tipo de coluna


mysql> ALTER TABLE copia_livros -> MODIFY titulo_do_livro VARCHAR(30) NOT NULL;

Renomeando uma tabela


ALTER TABLE copia_livros RENAME livros2;

Excluindo / adicionando colunas e tabelas


Como voc pode ver quando uma coluna criada ou uma tabela estas no so escritas na pedra e podem ser alteradas facilmente. Isso tambm implica em adicionar colunas em uma tabela existente ou exclu-la.

Eliminando tabelas e colunas


O comando DROP tambm utilizado para eliminar as colunas de uma tabela. Para excluir uma tabela existente execute a seguinte seqncia: DROP TABLE livros2; Para excluir somente uma coluna execute a seguinte seqncia: ALTER TABLE livros2 DROP editora_id; Isso excluir a coluna e todas as informaes que voc armazenou. 26

Adicionando colunas
O comando ADD o responsvel pela insero de uma nova coluna. ALTER TABLE livros2 ADD editora_id INT; #onde ADD adicionar

Adicionando colunas aps uma outra determinada


O comando AFTER adiciona a nova coluna na tabela aps o nome mencionado. ALTER TABLE livros2 ADD editora_id INT AFTER edicao_num;

Utilizando ndices
Um ndice um arquivo estruturado que facilita o acesso a dados. Isso significa que um ndice na coluna correta aumentar a velocidade de uma consulta consideravelmente. Um ndice trabalha da mesma forma que pastas com separador alfabtico em um gabinete de arquivo ele permite pular para a parte do alfabeto que voc est procurando.

Decidindo quais colunas incluir no ndice


Voc deve colocar um ndice na(s) coluna(s) que utilizar com mais freqncia como filtro em suas consultas. Os ndices tambm funcionam melhor em colunas que contm dados nicos. Essa uma das razes pela as quais chaves so normalmente suas melhores escolhas para ndices. Essa tambm pode ser uma das razes que as pessoas confundem chaves e ndices. Uma chave ajuda a definir a estrutura de um banco de dados, ao passo que ndice apenas aprimora o desempenho. Um ndice pode ser composto de uma ou mais colunas. Voc tambm pode ter mais de um ndice em uma tabela.

Criando um ndice
Por padro, o MySQL cria um ndice se voc declara uma coluna como uma chave primria. No h necessidade de criar um ndice nessa coluna; caso contrrio voc teria dois ndices em uma mesma coluna. A sintaxe para criar um ndice em uma coluna: ALTER TABLE livros ADD INDEX idx_titulo(titulo);

27

Excluindo ndices
Excluir um ndice to simples quanto criar. A sintaxe a mesma que excluir uma coluna ou uma tabela: DROP INDEX nomedoindice ON nomedatabela; Ou... ALTER TABLE nomedatabela DROP INDEX nomedoindice;

Para alterar uma tabela eliminando uma chave primria, utilize a seguinte sintaxe: ALTER TABLE nomedatabela DROP PRIMARY KEY; Nota: Se voc estiver usando uma coluna com AUTO_INCREMENT, voc no excluir a chave primria enquanto no retirar esse modificador.

Tipos de tabelas
O MySQL possui uma caracterstica um pouco diferente dos outros sistemas gerenciadores de banco de dados, uma vez que no MySQL possvel escolher o tipo da tabela no momento da criao. O formato de armazenamento dos dados, bem como alguns recursos do banco de dados so dependentes do tipo de tabela escolhido. A definio do tipo de tabela pode ser feita na criao da tabela, como voc pode ver a seguir: CREATE TABLE teste ( id INT NOT NULL, nome VARCHAR(30) NOT NULL, PRIMARY KEY (id) ) TYPE=MyISAM; No comando criado, o tipo da tabela, indicado em TYPE=MyISAM, significa que voc est criando uma tabela com o tipo MyISAM, que o padro das tabelas, caso no seja informado o TYPE. A partir da verso 4.0.18 voc pode utilizar ENGINE como sinnimo de TYPE. A seguir voc tem alguns dos tipos de tabelas no qual voc pode criar:

O tipo MyISAM
Este o tipo de tabela padro do MySQL. Caso no seja informado o tipo de tabela, o MySQL criar a tabela do tipo MyISAM. O tipo de tabela padro pode ser alterado incluindo-se no arquivo de configurao, chamado de my.cnf (no Linux) ou my.ini (no Windows), a opo a seguir: default-storage-engine=INNODB

28

As tabelas MyISAM so armazenadas em 3 arquivos, com o mesmo nome da tabela, mas com extenses diferentes: .FRM que armazena a definio da tabela. .MYD que contm os dados. .MYI contendo os ndices.

Estas tabelas so de grande desempenho para leitura, uma vez que os seus ndices so armazenados em rvores binrias balanceadas, o que prov um ganho para o acesso s informaes. O MyISAM no trabalha com transaes (commit ou rollback) e tambm no possui integridade referencial, isto , ao incluir uma chave estrangeira com alguns constraints, esta servir apenas como documentao, mas as restries no sero respeitadas pelo banco.

O tipo Memory
Tabelas do tipo MEMORY (conhecida anteriormente como HEAP) so armazenadas em memria e, graas a isso, so extremamente rpidas. Em contrapartida, o seu contedo voltil, uma vez que no so gravadas em disco. Caso haja uma queda do SGBD os dados destas tabelas sero perdidos. Alm disto, necessrio um processo para dar a carga inicial nos dados quando o servidor de banco iniciar e sua execuo. A principal aplicao das tabelas MEMORY seria para tabelas que so consultadas com muita freqncia, mas que no sofrem muitas alteraes (lookup tables).

29

O tipo MERGE
As tabelas do tipo MERGE so colees de tabelas MyISAM idnticas. Este recurso permite a diviso de uma tabela grande em vrias partes menores, e ainda assim permite acesso ao contedo de todas elas como se fossem uma nica tabela. Veja um exemplo de como utiliz-la: CREATE TABLE exemplo1 ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, exemplo VARCHAR(20) );

CREATE TABLE exemplo2 ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, exemplo VARCHAR(20) );

INSERT INTO exemplo1 VALUES (null, 'Exemplo1'),(null,Teste1'); INSERT INTO exemplo2 VALUES (null, 'Exemplo2'),(null, 'Teste2');

CREATE TABLE mesclar (ids INT NOT NULL AUTO_INCREMENT, exemplos VARCHAR(20), INDEX(ids) )TYPE=MERGE UNION=(exemplo1,exemplo2); SELECT * FROM mesclar; ids 1 2 1 2 Exemplos Exemplo1 Teste1 Exemplo2 Teste2

Resultado da Mesclagem

30

O tipo BDB
O tipo de tabela BDB vem de BerkeleyDB, e desenvolvido pela Sleepycat (http://www.sleepycat.com). O tipo BDB prov ao MySQL um manipulador de tabelas com controle de transao, dando assim a voc a possibilidade de usar os comandos COMMIT e ROLLBACK, alm de fornecer a recuperao automtica de dados em caso de queda do sistema. O BDB apresenta um mecanismo de lock em nvel de pgina, onde apenas os dados de uma mesma pgina ficaro bloqueados durante um perodo de lock.

O tipo InnoDB
O tipo InnoDB do tipo de tabela transacional, desenvolvido pela InnoDBase Oy. A partir da verso 4.0 do MySQL ele passa a ser parte integrante das distribuies do MySQL. O InnoDB apresenta, alm da capacidade transacional, outros recursos que so realmente teis na utilizao de tabelas: Integridade referencial, com implementao dos constraints SET NULL, SET DEFAULT, RESTRICT e CASCADE; Ferramenta de backup on-line (ferramenta comercial, no GPL); Lock de registro, como Oracle, DB2, etc; Nveis de isolamento; Armazenamentos de dados em tablespace.

Por se tratar de um tipo de tabela com recursos mais avanados, requer mais espao em memria e disco, alm de se apresentar, em determinadas situaes, um pouco mais lento que tabelas do tipo MyISAM. Apesar disto, o tipo InnoDB tem se mostrado extremamente rpido se comparado com outros SGBDs transacionais.

Alterando o tipo de uma tabela


Com o comando ALTER TABLE no possvel alterar o tipo da tabela, por isso, voc pode alterar da seguinte maneira: ALTER TABLE livros ENGINE=INNODB;

31

Tipo de dados
Como a maioria dos sistemas de gerenciamento de banco de dados relacional (Relational Database Management Systems RDBMS), o MySQL tem tipos de dados especficos de coluna. O MySQL tem vrios tipos de dados que suportam funes diferentes. Um tipo de dados a definio das informaes que uma coluna armazenar. Pode haver muitos tipos de dados em uma tabela, mas cada coluna armazenar seu prprio tipo de informaes especficas. H quatro tipos de grupos de formatos de dados. O primeiro o numrico. O segundo tipo o formato de caractere ou string. Esse formato consiste em letras e nmeros ou qualquer coisa que voc coloque entre aspas. O terceiro grupo formado por datas e horas. O tipo final uma forma de miscelnea. Ele consiste em tudo que no se encaixa em qualquer uma das outras categorias.

Tipos numricos
Os tipos numricos destinam-se somente a nmeros. Os diferentes tipos de nmeros ocupam uma quantidade diferente de espao na memria. Um bom exemplo voc tentando comprar um chocolate em uma loja e ao passar no caixa a voc descobre que deve pagar pela caixa inteira. Voc diz que no precisa de tudo, mas atacado e s e vendido de caixa. Se voc vai utilizar 3 nmeros, por que ocupar um espao na memria como se estivesse utilizando 100? Lembre-se: voc s deve pagar pelo que vai usar. Armazenamento numrico Nome do tipo TINYINT SMALLINT MEDIUMINT INT BIGINT FLOAT(Inteiro,Decimal) DOUBLE(Inteiro,Decimal) DECIMAL(Inteiro,Decimal) Espao na memria 1 byte 2 bytes 3 bytes 4 bytes 8 bytes 4 bytes 8 bytes O valor de bytes Inteiro + 2

Se a coluna numrica e declarada UNSIGNED, o intervalo dobra para o tipo dado. Por exemplo, se voc declara que uma coluna que UNSIGNED TINYINT, o intervalo dessa coluna de 0 a 255. Declarando dessa forma voc faz com que essa coluna tenha somente valores positivos.

32

Tipos numricos Nome do tipo TINYINT SMALLINT MEDIUMINT INT BIGINT FLOAT (Inteiro,Decimal) DOUBLE (Inteiro,Decimal) DECIMAL (Inteiro,Decimal) Intervalo de valor -128 a 127 -32768 a 32767 -8388608 a 83888607 -2147483648 a 2147483647 -9223372036854775808 a 9223372036854775807 Varia dependendo dos valores Varia dependendo dos valores Varia dependendo dos valores Sem sinal 0 255 0 65535 0 - 16777215 0 - 4294967295 0 - 18446744073709550615

FLOATs, DOUBLEs e DECIMALs so tipos numricos que podem armazenar fraes. Os outros no. Utilize DECIMAL para nmeros realmente grandes. DECIMALs so armazenados de maneira diferente e no tm limites.

Modificadores AUTO_INCREMENT, UNSIGNED e ZEROFILL


Esses modificadores s podem ser utilizados com tipos de dados numricos. Eles utilizam operaes que somente podem ser feitas com nmeros.

AUTO_INCREMENT
O modificador de coluna AUTO_INCREMENT automaticamente aumenta o valor de uma coluna adicionando 1 ao valor mximo atual. Ele fornece um contador que timo para criar valores nicos. Voc tambm pode incluir um nmero. Se quiser que uma coluna AUTO_INCREMENT inicie com 9.000, por exemplo, s declarar explicitamente um ponto inicial utilizando a seguinte sintaxe: mysql> CREATE TABLE teste ( -> id INT NOT NULL PRIMARY KEY AUTO_INCREMENT -> ) AUTO_INCREMENT=9000;

33

UNSIGNED
UNSIGNED depois de um tipo inteiro significa que ele s pode ter um zero ou valor positivo. ZEROFILL O modificador de coluna ZEROFILL utilizado para exibir zeros esquerda de um nmero com base na largura de exibio. Como todos os tipos de dados numricos tm uma largura de exibio opcional, se voc declara um INT(8) ZEROFILL e o valor armazenado 23, ele ser exibido como 00000023. Para isso utilize a seguinte sintaxe: mysql>CREATE TABLE teste (id INT(4) ZEROFILL);

Tipos de caractere ou de dados de string


O outro grupo importante de tipo de dados so os tipos de strings ou de caractere. Uma string um conjunto de caracteres. Um tipo de string pode armazenar dados como So Paulo ou Avenida So Joo, n. 255. Qualquer valor pode ser armazenado em um tipo de dados de string.

Tipos string Nome de tipo CHAR(X) VARCHAR(X) TINYTEXT TINYBLOB TEXT BLOB MEDIUMTEXT MEDIUMBLOB LONGTEXT LONGBLOB Tamanho mximo 255 bytes 255 bytes 255 bytes 255 bytes 65.535 bytes 65.535 bytes 1,6 MB 1,6 MB 4,2 GB 4,2 GB Espao de armazenamento X bytes X + 1 byte X + 1 byte X + 2 bytes X + 2 bytes X + 2 bytes X + 3 bytes X + 3 bytes X + 4 bytes X + 4 bytes

34

CHAR e VARCHAR
Fora todos esses tipos, os tipos VARCHAR e CHAR so os mais utilizados. A diferena entre eles que o VARCHAR tem um comprimento varivel e o CHAR no. Os tipos CHAR so utilizados para comprimentos fixos. Voc utilizar esse tipo quando os valores no variam muito. Se voc declara um CHAR(10), todos os valores armazenados nessa coluna tero 10 bytes de comprimento, mesmo se ele tiver 3 bytes de comprimento. O MySQL preenche esse valor para ajustar o tamanho que foi declarado. O tipo VARCHAR faz o contrrio. Se voc declara um VARCHAR(10) e armazena um valor que tem somente 3 caracteres de comprimento, a quantidade total de espao de armazenamento de 4 bytes (o comprimento mais um).

A vantagem de utilizar os tipos CHAR que as tabelas que contm esses valores fixos so processadas mais rapidamente que aquelas que so compostas pelo tipo VARCHAR. A desvantagem de utilizar o tipo CHAR o espao desperdiado. De um modo geral no se pode utilizar os dois na mesma tabela, pois quando feito o MySQL converte automaticamente uma coluna com o tipo CHAR em VARCHAR. A nica exceo quando voc declara uma coluna como VARCHAR(3), o MySQL converte automaticamente em CHAR(3). Isso acontece porque valores de 4 caracteres ou menores so muito pequenos para o tipo VARCHAR.

TEXT e BLOB
TEXT e BLOB(Binary Large Object) so tipos variveis de comprimento que podem armazenar grandes quantidades de dados. Voc utilizar esses tipos quando quiser armazenar imagens, sons ou grandes quantidades de textos, como pginas da Web ou documentos. Um bom exemplo se voc estiver querendo armazenar valores de uma <TEXTAREA> de uma sesso de comentrios em uma pgina da Web, o tipo TEXT seria uma boa escolha.

35

Tipos variados
H basicamente trs tipos variados; os tipos ENUM, SET e DATE/TIME. Tipo ENUM O tipo ENUM uma lista ENUMerada. Significa que essa coluna pode armazenar apenas um dos valores que esto declarados na lista dada. A sintaxe para criar uma coluna ENUMerada como segue: mysql> CREATE TABLE coluna_enum ( -> estados ENUM(SP,RJ,MG,RS) -> ); Voc pode ter at 65.535 itens em sua lista enumerada. uma boa escolha para caixas de combinao.

Tipo SET
O tipo SET muito parecido com o tipo ENUM. O tipo SET, como o tipo ENUM, armazena uma lista de valores. A diferena que no tipo SET, voc pode escolher mais de uma opo para armazenar. Um tipo SET pode conter at 64 itens. O tipo SET uma boa escolha para opes em uma pgina da Web em que o usurio pode escolher mais de um valor. A sintaxe para criar um tipo SET: mysql>CREATE TABLE teste ( -> passatempo SET(Televiso,Futebol,Vdeo Game,Cinema) -> ); A coluna criada seria capaz de armazenar uma ou mais escolhas, como por exemplo: Futebol #como uma escolha Futebol, Vdeo Game # como mais de uma escolha. Quando se inserem os valores em uma coluna do tipo SET, se coloca entre aspas ou apstrofos e separados por vrgula: mysql>INSERT INTO teste (passatempo) VALUES (Futebol,Vdeo Game);

36

Modificadores adicionais de coluna


O MySQL tem vrias palavras-chave que modificam a maneira como uma coluna funciona. Como vimos acima, temos AUTO_INCREMENT e ZEROFILL e como eles afetam a coluna em que so utilizados. Alguns modificadores se aplicam apenas em colunas de um certo tipo de dado. Tabela de Modificadores Nome de modificador AUTO_INCREMENT BINARY DEFAULT NOT NULL NULL PRIMARY KEY UNIQUE UNSIGNED ZEROFILL Tipos aplicveis Todos os tipos INT CHAR, VARCHAR Todos, exceto BLOB, TEXT Todos os tipos Todos os tipos Todos os tipos Todos os tipos Tipos numricos Tipos numricos

O modificador BINARY faz com que os valores armazenados sejam tratados como strings binrias, fazendo-os distinguir letras maisculas e minsculas. Ao classificar ou comparar essas strings, a distino entre maisculas e minsculas ser considerada. Por padro os tipos CHAR e VARCHAR no so armazenados como binrios. O modificador DEFAULT permite especificar o valor de uma coluna se no existir um valor. Os modificadores NULL e NOT NULL especifica se na coluna deve haver um valor ou no. Por exemplo; se voc especificar a coluna como NOT NULL voc forado a colocar um valor, pois esse campo requerido. PRIMARY KEY um ndice que no deve conter valores nulos (NULL). Cada tabela deve conter uma chave primria, isso facilita uma consulta de dados. O modificador UNIQUE impe a regra que todos os dados dentro da coluna declarada devem ser nicos. Por exemplo; se voc declarar (no faa isso) que a coluna nome deve ser UNIQUE(nica), no pode haver valores duplicados, caso contrrio gerar um erro. A sintaxe para sua criao : mysql>CREATE TABLE IF NOT EXISTS teste (nome VARCHAR(30)UNIQUE NOT NULL);

37

Tipos de data e hora


O MySQL suporta vrios tipos de data e hora. Esses so mostrados na tabela a seguir: Tabela de data e hora Tipo DATE TIME DATETIME TIMESTAMP[(F)] Intervalo 1000-01-01 a 9999-12-31 -838:59:59 a 838:59:59 1000-01-01 00:00:00 a 999912-31 23:59:59 1970-01-01 00:00:00 Descrio Datas. Ser exibida como YYYYMM-DD Hora. Ser exibida como HH:MM:SS Data e Hora. Ser exibida como YYYY-MM-DD HH:MM:SS Um registro de data/hora, til para relatrio de transao. O formato de exibio depende do formato de F. Um ano. Voc pode especificar 2 ou 4 formatos de dgitos. Cada um desses tem um intervalo diferente, como mostrado.

YEAR[(2 | 4)]

70-69 (1970-2069) 1901-2155

Sintaxe bsica da SQL


A primeira coisa que devemos fazer quando criamos um banco de dados e depois uma tabela e utiliz-la inserindo dados.

Comando INSERT
O comando INSERT INTO adiciona dados em uma tabela. A sua sintaxe : mysql> INSERT INTO livros VALUES ( -> '85-7585-120-5', ->'Core Java Fundamental', ->6, ->2004, ->'Desenvolva Java com vrios exemplos');

O nome da tabela em que voc ir inserir dever ser declarada logo no incio INSIRA DENTRO nomedatabela (colunas) VALORES (valores inseridos dentro de cada coluna); importante salientar que strings ficam entre aspas ou apstrofos e valores numricos (declarados como tipo de dados numricos) no precisam de aspas ou apstrofos 38

Para inserir mais de um valor separe-os por vrgula: mysql> INSERT INTO nomedatabela(colunas) VALUES (valores inseridos 1), ->(valores inseridos 2), ->(e assim por diante);

Comando SELECT
A instruo SELECT provavelmente a mais utilizada de todas as instrues de SQL. A instruo SELECT somente retornar os dados que so armazenados no banco de dados dentro de uma tabela. O MySQL realiza essa instruo mais rpido que qualquer outro banco de dados do mercado. A sintaxe : SELECT nomedacoluna FROM nomedatabela WHERE condies; No caso do nosso banco de dados livraria: mysql>SELECT * FROM livros; # o asterisco indica todas as colunas

39

Um outro caso, a clusula WHERE


mysql>SELECT * FROM livros WHERE ISBN='85-7585-120-5'; Nesse caso foi colocada uma condio que dentre todos os registros s dever aparecer os dados ONDE a coluna ISBN for igual '85-7585-120-5'. A clusula WHERE especifica o critrio utilizado para selecionar linhas particulares. O nico sinal igual utilizado para testar igualdade observe que isso diferente do Java e fcil se confundir. Alm da igualdade, o MySQL suporta um conjunto completo de operadores e expresses regulares. Na tabela a seguir esto listadas as mais utilizadas por voc: Tabela de Operadores no MySQL Operador Nome Exemplos = igual autor_id = 1 > < >= <= != ou <> IN NOT IN IS NOT IS NULL Endereo no nulo Endereo nulo Quantidade entre um valor e outro maior que menor que maior ou igual a menor ou igual a diferente de Quantidade > 50 Quantidade < 50 Quantidade >= 50 Quantidade <= 50 Quantidade !=0 cidade in (So Paulo, Minas Gerais) cidade not in (So Paulo, Minas Gerais) Descrio Testa se os dois valores so iguais Testa se um valor maior que o outro Testa se um valor menor que o outro Testa se um valor maior ou igual ao outro Testa se um valor menor ou igual ao outro Testa se um valor diferente do outro Testa se o valor est em um conjunto particular Testa se o valor no est em um conjunto particular

promocao is null valor BETWEEN 200 AND 350

Testa se o campo no contm um valor Testa se o campo tem valores entre um e outro

BETWEEN

40

Algumas funes que trabalham com a instruo SELECT


MAX( ) SELECT MAX(coluna) FROM tabela; Essa funo seleciona o valor mximo de uma coluna.

MIN( ) SELECT MIN(coluna) FROM tabela; O contrrio de MAX, retorna o valor mnimo de uma coluna.

LIMIT SELECT * FROM tabela LIMIT 2; Limita a visualizao de 2 linhas de dados. SELECT * FROM tabela LIMIT 2,5; Limita a visualizao da linha 2 a linha 5 de dados.

COUNT( ) SELECT COUNT(coluna) FROM tabela; Conta quantas linhas de dados existem na coluna nome. SELECT COUNT(*) FROM tabela; Conta quantas linhas de dados existem em todas as linhas. Nota: Em caso de fazer a contagem em campo de valor NULL a contagem ser diferente da no valor total.

SUM( ) SELECT SUM(coluna) FROM tabela; Soma todos os dados da coluna.

ORDER BY SELECT * FROM tabela ORDER BY coluna; Coloca os dados selecionados em ordem crescente pela coluna. ORDER BY ... DESC SELECT * FROM tabela ORDER BY coluna DESC; 41

Coloca os dados selecionados em ordem decrescente pela coluna. AVG( ) SELECT AVG(coluna) FROM tabela; Faz a mdia aritmtica da coluna designada.

LIKE mysql>SELECT * FROM livros WHERE titulo LIKE Java%; Neste caso pode-se fazer uma busca por apenas a inicial do valor desejado. O sinal de %(porcentagem) o caractere curinga que significa qualquer caractere. mysql>SELECT * FROM livros WHERE titulo LIKE %Java%; Colocando a % no incio e no fim, com um valor no meio, possvel buscar todos os valores que contenham as letras Java, seja no comeo, meio ou fim.

Um caso a parte: a unio do INSERT INTO ... SELECT


INSERT INTO tabela1(coluna) SELECT tabela.coluna2 FROM tabela2; Insere na tabela tabela1.coluna valores da coluna2 da tabela tabela2.

Comando UPDATE
O comando UPDATE permite editar os valores de dados existentes. A sintaxe para modificar os valores : UPDATE tabela SET coluna= valor WHERE coluna=valor; Atualiza os dados da coluna determinada em SET na condio passada em WHERE.

Comando DELETE
A instruo DELETE muito semelhante instruo SELECT. A nica diferena em vez de selecionar registros para visualizar, essa instruo exclui esses registros. A instruo DELETE tem a seguinte sintaxe: DELETE FROM tabela WHERE coluna=valor;

42

Trabalhando com Junes


As junes so uma parte integrante de um banco de dados relacional. As junes permitem ao usurio de banco de dados tirar proveito dos relacionamentos que foram desenvolvidos na fase do projeto do banco de dados. Uma JUNO o termo utilizado para descrever o ato em que uma ou mais tabelas so unidas entre si para recuperar dados necessrios com base nos relacionamentos que so compartilhados entre elas. Criando uma juno com INNER JOIN A seguinte sintaxe cria uma juno: SELECT tabela1.coluna, tabela2.coluna FROM tabela1 INNER JOIN tabela2 on tabela1. coluna_de_valor_identico = tabela2.coluna_de_valor_identico; INNER JOINs so provavelmente as mais comuns de todas as junes. Uma INNER JOIN significa que todos que todos os registros que esto sem correspondncia so descartados. Somente as linhas correspondidas sero exibidas no conjunto de resultados. Os dados aparecem na ordem em que voc especifica.

Chaves variadas do MySQL


O que uma chave? Uma chave em uma tabela em um banco de dados fornece um meio de localizar rapidamente informaes especficas. Embora uma chave no precise significar qualquer coisa para o usurio humano do banco de dados, as chaves so uma parte vital da arquitetura de banco de dados e pode influenciar significativamente o desempenho. Princpios da Chave Imagine que voc tem uma coleo muito simples de dados em que armazena apenas os dados teis simples. Por exemplo, voc talvez crie uma tabela de Clientes semelhante a um antigo arquivo de ndice de fixas, com nome e detalhes de um cliente em cada ficha. Quando quiser pesquisar um cliente, voc procura o arquivo e l cada ficha sucessivamente. Ao ver a(s) ficha(s) que quer, voc l essas informaes teis como o nome, endereo e nmero de telefone do cliente. Convencionalmente, voc talvez classifique o arquivo de ndice de ficha por ordem de sobrenome. Isso ajuda se voc sabe o nome da pessoa cujos dados est examinando. Mas e se voc quiser localizar as pessoas por algum outro critrio.

43

Naturalmente, voc pode configurar o banco de dados MySQL da mesma maneira. Mas logo ficaria com dificuldades.Com a quantidade de dados o seu banco de dados teria de ler as informaes sucessivamente, o que torna uma operao ineficiente. Voc chamaria essa operao de varredura de tabela. Essa a mais demorada das operaes em um banco de dados. nesse momento em que uma chave se torna til.

Como as chaves funcionam Uma chave existe como uma tabela extra no banco de dados, embora pertena sua tabela pai. Ela ocupa espao fsico no disco rgido (ou outras reas de armazenamento) do banco de dados. Pode ser to grande quanto a tabela principal e, teoricamente, at maior. Voc define a chave para se relacionar com uma ou vrias colunas em uma tabela especfica. Como os dados em uma chave so totalmente derivados da tabela, voc pode eliminar e recriar uma chave sem qualquer perda de dados.

Benefcios de usar uma chave A utilizao adequada de chaves pode aprimorar significativamente o desempenho do banco de dados. Para utilizar a analogia de um ndice de livro, considere o pouco nmero de pginas que necessrio no ndice de um livro para dar viso rpida dos temas importantes. Compare quanto tempo voc levaria se estivesse pesquisando pelo volume, pgina por pgina.

Suporte de chave do MySQL O MySQL suporta os seguintes comandos para criar chaves nas tabelas existentes: ALTER TABLE nome_tabela ADD (KEY | INDEX) nome_do_ndice (nome_da_coluna [,...]); ALTER TABLE nome_tabela ADD UNIQUE nome_do_ndice (nome_da_coluna[,...]); ALTER TABLE nome_tabela ADD PRIMARY KEY nome_do_ndice (nome_da_coluna[,...]);

Observe que no MySQL, chave e ndice so sinnimos. Esses so os formatos preferidos para adicionar chaves a tabelas existentes. Para compatibilidade com outras implementaes de SQL, o MySQL tambm suporta os seguintes: CREATE INDEX nome_do_ndice ON nome_tabela (nome_da_coluna[,...]); CREATE UNIQUE INDEX [nome_do_ndice] ON nome_tabela (nome_da_coluna[,...]); CREATE PRIMARY KEY ON nome_tabela (nome_da_coluna,...); Voc pode definir as chaves quando cria uma tabela: CREATE TABLE nome_da_tabela (nome_da_coluna tipo_de_campo [NULL | NOT NULL], KEY col_index (nome_da_coluna)); 44

45

Chaves primrias
Uma chave primria semelhante em princpio a uma chave nica, seus dados devem ser nicos, mas a chave primria de uma tabela tem um status mais privilegiado. Apenas uma chave primria pode existir para cada tabela e seus valores de campo nunca podem ser nulos. Uma chave primria geralmente utilizada como um link estrutural no banco de dados, definindo o relacionamento entre as tabelas diferentes. Sempre que quiser unir uma tabela a outra, voc deve ter a chave primria dessa tabela. O MySQL no requer que voc especifique que a coluna em que estiver a chave primria seja NOT NULL(no nula) *, mas porm se tentar colocar um valor idntico na coluna chave, esta retornar um erro que no pode haver duplicao.

Chaves estrangeiras
As chaves estrangeiras so atualmente suportadas no MySQL em outro formato de tabela. A mais usada e recomenda para transaes chamada de InnoDB. A seguir voc tem o comando necessrio para criar uma chave estrangeira no seu banco de dados: ALTER TABLE publicacao ADD CONSTRAINT FK_publicacao FOREIGN KEY (isbn) REFERENCES livros (isbn) ON DELETE CASCADE ON UPDATE CASCADE; Excluindo uma chave estrangeira Para excluir uma chave estrangeira, use o comando: ALTER TABLE publicacao DROP FOREIGN KEY FK_publicacao;

Transaes
Transaes so mecanismos que asseguram consistncia no banco de dados, especialmente no caso de erro ou queda no servidor. Usando transaes no MySQL Por padro, o MySQL na verso atual roda em autocommit mode. Isto significa que cada declarao que voc executa escrita imediatamente ao banco de dados (commit). Se voc desejar trabalhar com transaes no MySQL, voc ter que executar o comando: set autocommit=0; Inicie a transao com o comando: start transaction; 46

Para ilustrar uma transao, voc vai executar uma EXCLUSO na tabela LIVROS: DELETE FROM livros; D um SELECT para ter certeza de que os dados foram todos excludos da tabela: SELECT * FROM livros; Aps confirmar que os dados foram realmente excludos, execute o comando: rollback; O comando ROLLBACK retorna o estado anterior. Mas se voc desejar confirmar o comando, utilize o comando a seguir: commit;

Stored Procedures
Stored Procedures (procedimentos armazenados) passou a ser suportado pelo MySQL na verso 5. Agora, alm do poder da velocidade desse incrvel banco de dados, voc tambm pode armazenar rotinas e cham-las quando necessitar. As stored procedures pode consistir em declaraes de SQL e vrias estruturas de controle especiais. Isto pode ser til quando voc quiser executar a mesma funo de aplicaes diferentes ou plataformas, ou como um modo de encapsular funcionalidade. Criando um Stored Procedure com resultados de um JOIN Aqui voc aprender a criar um stored procedure simples para executar uma query com join entre as tabelas livros, publicacao, autores e editora: DELIMITER // CREATE PROCEDURE sp_m_liv_e_aut( ) BEGIN SELECT nome as Nome do Autor, titulo as Ttulo, ano_publicacao as Ano Publicado, editora_nome as Editora FROM autores INNER JOIN publicacao USING (autor_id, autor_id) INNER JOIN livros USING (isbn, isbn) INNER JOIN editora USING (editora_id, editora_id); END // DELIMITER ; Para chamar a procedure, utilize o comando: call sp_m_liv_e_aut( ); 47

Visualizando procedures criadas Para visualizar as Stored Procedures criadas, execute o comando a seguir: SHOW PROCEDURE STATUS;

Visualizando a criao da procedure Para visualizar o cdigo da Stored procedure, execute o comando: SHOW CREATE PROCEDURE sp_m_liv;

Criando um Stored Procedure com parmetros


A idia agora transmitir um parmetro para que voc possa filtrar os livros, chamando apenas uma procedure com o ISBN do livro: DELIMITER // CREATE PROCEDURE sp_m_liv_isbn(IN vIsbn VARCHAR(100)) BEGIN SELECT * FROM livros WHERE isbn=vIsbn; END // DELIMITER ;

Para chamar essa procedure, execute o comando a seguir: call sp_m_liv_isbn('85-7393-436-0');

Criando um procedure com a clusula LIKE O stored procedure seguinte demonstra como usar a clusula LIKE para retornar valores do banco de dados MySQL: DELIMITER $$ CREATE PROCEDURE sp_m_liv(IN vTitulo VARCHAR(100)) BEGIN SELECT * FROM livros WHERE titulo LIKE CONCAT('%',vTitulo,'%') ORDER By titulo; END $$ DELIMITER; 48

Para chamar essa procedure, execute o comando a seguir: call sp_m_liv('JBuilder'); Para se excluir uma stored procedure execute o seguinte comando: DROP PROCEDURE sp_m_liv;

Criando Views
Uma view pode ser pensada de como uma "query" armazenada. Uma view definida cria essencialmente uma definio nomeada para uma declarao SQL que pode ser ento referenciada como uma tabela em outras declaraes SQL. uma complexa definio para uma situao simples, aqui voc armazena a query e depois a chama pelo nome Para criar uma view, execute o comando a seguir: CREATE OR REPLACE VIEW vw_livros(nome,titulo,ano_publicacao,editora_nome) AS SELECT nome, titulo, ano_publicacao, editora_nome FROM autores INNER JOIN publicacao USING (autor_id, autor_id) INNER JOIN livros USING (isbn, isbn) INNER JOIN editora USING (editora_id, editora_id);

Para chamar a VIEW, basta usar o comando como se estivesse fazendo uma query: SELECT * FROM vw_livros; Ou se preferir: SELECT titulo, editora_nome, nome FROM vw_livros WHERE nome='Edson';

Visualizando a estrutura de uma view


Assim como nas tabelas, execute o comando: DESC vw_livros;

49

Visualizando a criao da view


Para visualizar o cdigo da view, execute o comando: SHOW CREATE VIEW vw_livros; Como voc pode ver, as VIEWS so tratadas como se fossem uma outra tabela, armazenando apenas a query que voc deseja executar, podendo ser manipulada depois.

Excluindo uma view


Para se excluir a view, execute o seguinte comando: DROP VIEW vw_livros;

Criando Triggers (gatilhos)


Um trigger um tipo especial de programa armazenado que dispara quando uma tabela modificada por uma declarao INSERT, UPDATE, ou DELETE (DML). Triggers implementam funcionalidade que tem que acontecer sempre que uma certa mudana ocorre na tabela. Porque gatilhos so diretamente fixos tabela, cdigo de aplicao no pode evitar gatilhos no banco de dados. Usos tpicos de gatilhos incluem a implementao lgica de negcios crticos, a denormalizao de dados para reaes de desempenho, e os auditando nas mudanas feitas a uma tabela. Podem ser definidos gatilhos para disparar antes ou depois que uma declarao DML especfica execute. Para criar a Trigger, primeiramente crie a seguinte tabela: CREATE TABLE livros_backup ( isbn CHAR(13) NOT NULL, titulo VARCHAR(50) default NULL, edicao_num TINYINT(2) default NULL, ano_publicacao YEAR(4) default NULL, descricao TEXT, dt_exclusao DATETIME ) ENGINE=InnoDB;

50

Essa tabela ser uma tabela de backup da tabela de livros, assim sendo, quando voc excluir da tabela de livros, essa tabela armazenar os dados excludos. Para que isso seja possvel, voc ter que criar um gatilho (trigger): DELIMITER $$ CREATE TRIGGER tr_livbackup BEFORE DELETE ON livros FOR EACH ROW BEGIN DECLARE DATA DATE; SET DATA = NOW(); INSERT INTO livros_backup SET isbn = OLD.isbn, titulo=OLD.titulo, edicao_num=OLD.edicao_num, ano_publicacao=OLD.ano_publicacao, descricao=OLD.descricao, dt_exclusao = DATA; END $$ DELIMITER;

Voc pode criar gatilhos no MySQL para comandos INSERT, UPDATE e DELETE, com j havia sido dito. No caso, o comando fora feito para a execuo do DELETE. Note a palavra OLD sendo usada antes de cada COLUNA. Isso significa que ele receber os dados antigos. Como a execuo deve ser feita antes da excluso dos dados na tabela livros, voc v na declarao da TRIGGER o comando BEFORE e seguido do comando SQL que o far disparar DELETE e em que tabela. Um loop FOR EACH varrer os dados e os colocar na tabela de backup.

Visualizando as triggers criadas


Execute o comando para visualizar as triggers criadas, bem como sua estrutura: show triggers; Excluindo uma trigger Para se excluir a trigger, utilize o comando a seguir: DROP TRIGGER tr_livbackup 51

Administrando o MySQL
Um sistema de MySQL pode ter muitos usurios. O usurio root geralmente deve ser utilizado somente para propsitos de administrao, por razes de segurana. Para cada usurio que precisar utilizar o sistema, voc precisar configurar uma conta e senha. No obrigatrio configurar senhas para usurios, mas recomendo que voc configure senhas para todos os usurios que forem criados. Entendendo o sistema de privilgios do MySQL O MySQL suporta um sofisticado sistema de privilgios. Um privilgio um direito que um usurio tem para realizar uma ao particular em um objeto particular. Quando voc cria um usurio no MySQL, voc concede a ele um conjunto de privilgios para especificar o que ele pode e no pode fazer dentro do sistema. Configurando usurios Os comandos GRANT e REVOKE so utilizados para fornecer e retirar direitos dos usurios do MySQL. Ele pode ser concedido nos seguintes nveis: Global Banco de dados Tabela Coluna

O comando para criar um usurio com privilgios como mostrado a seguir: GRANT privilgios [colunas] ON item TO nome_do_usuario [IDENTIFIED BY senha] [WITH GRANT OPTION] As clusulas entre colchetes so opcionais. Para conceder privilgios ao um usurio no banco livraria, voc deve criar um usurio com os seguintes privilgios: mysql> grant all -> on livraria.* -> to edson identified by 'integrator';

Com isso voc concede todos os privilgios de manipulao do banco de dados livraria somente ao usurio edson, com a senha integrator.

52

Confirmando o novo usurio


Para confirmar a criao do novo usurio, voc deve executar o comando a seguir: flush privileges; Revogando privilgios Para revogar esse privilgio voc deve fazer o seguinte comando: mysql> revoke all -> on livraria.* -> from edson;

Obtendo informaes com SHOW


Se voc desejar visualizar todos os privilgios que um usurio tem, execute o seguinte comando: SHOW GRANTS FOR edson;

Para visualizar todos os usurios existentes no seu MySQL execute;


SHOW GRANTS;

53

Ferramenta de modelagem de tabelas para uitlizao do MySql

O BDDesigner4 uma ferramenta livre, desenvolvida pela FabForce, tendo como funo de visualizar graficamente o projeto da base de dados, modelar e controlar os dados nele existente. Sua criao foi baseada em componentes Kylix e Delphi podendo ser utilizada tanto para plataforma Windows ou Linux. Para utilizar estes recursos foi elaborado este manual utilizando um pequeno modelo de dados chamado Controle de Vo, ao iniciarmos a construo das tabelas iremos demonstrar as partes que compem a tela principal do DBDesigner.

54

Principais botes da ferramenta.


Conectar com a Base deDados. Cancelar a conexo com a Base de Dados. Apagar a conexo realizada com a Base de Dados. Executar a tranferncia da modelagem para a Base de Dados. Fechar a janela de tranferncia da modelagem. Copiar o arquivo texto para a rea de tranferncia. Salvar o arquivo texto em um arquivo. Utilizar comandos SQL. No salvar a incluso realizada. Incluir um novo dado na tabela selecionada. Excluir dados da tabela selecionada. Salvar a incluso realizada. Retornar um tem anterior. Avanar para o prximo tem Avanar para o primeiro tem. Avanar para o ltimo tem. Executar os comandos SQL. Salvar os comandos SQL. Visualizar o Grid e os comandos SQL. Visualizar a tela com janelas horizontais ou verdicais.

55

Barras de Ferramentas na rea de trabalho

Do lado esquerdo temos Tools Palette onde existem os componentes mais usados durante a criao e manipulao das tabelas. So estes modo de visualizao da interface com o uso de query, criao de tabelas, ligaes, visualizao utilizando o Zomm.

Este barra de ferramenta ser usada para controlar a visualizao na rea de trabalho onde as tabelas foram criadas. Com o mouse sobre o quadrado azul possvel navegar sobre o documento inteiro. Com a barra de deslizamento possibilita aumentar o documento. Nesta barra de ferramenta ser possvel verificar os tipos e de dados utilizados nas tabelas.

56

Nesta barra de ferramenta ser possvel verificar os tipos e de dados utilizados nas tabelas.

Nesta barra ser permitido visualizar as tabelas, colunas e seus relacionamentos com outras tabelas.

O usurio ter a opo de deixar ou no visvel s barras de ferramentas na rea de trabalho. Esta opo se encontra no menu Windows da ferramenta DBDesigner.

57

Inicializando a confeco de tabelas.


Para confeccionar as tabela necessrio que haja uma configurao de modo que atenda as necessidades de cada modelagem.

Usurio poder fazer esta configuraes acessando o Menu Options Model Options.

A seguir identificaremos as funcionalidades de cada tem da Janela Model Options. O primeiro quadrado esquerda esto as opes de cada funo que sero descritos a seguir. General Options As funes seguem abaixo: Model Name: O nome do modelo a ser criado Version: Definio de verso Comments: Comentrios sobre o documento a ser criado Default Font: A fonte da letra a ser utilizada nas tabelas Region Colors Poder ser inserida uma nova cor ou utilizar as existentes.

58

Editing Options
As funes seguem abaixo: Default Tables Settings: Definida o tipo de tabela. Activate Reference e Definitions for all new Relations: Criao da chave estrangeira automaticamente. Automatically create index on FK Fields in Destination Reference Definition is activated for Relation (for InnoDB): Criao de ndices nas tabelas. Add Source Table Name to Foreign Key Columns' Name: Colocar o nome da tabela que se refere chave estrangeira. Foreign Key Prefix : O usurio poder inserir marcadores no campo onde ficar definido a chave estrangeira. Este marcador ser inserido antes do nome automaticamente. Foreign Key PostFix: O usurio poder inserir marcadores no campo onde ficar definido a chave estrangeira. Este marcador ser inserido aps o nome automaticamente. Canvas Size: Define o tamanho da rea de trabalho onde a modelagem est sendo desenvolvida. O boto Make these Settings the Default Settings for all new Models: Para definir como padronizao a configurao realizada.

59

DataBase Options:
Database Type: O tipo de tabela a ser utilizado no modelo Default DataType: Definir qual o tipo de atributo a ser inserido na tabela. Cada vez que for includo um atributo na tabela automaticamente ser do tipo definido nesta opo ficando por Default.

Aps as configuraes definidas iremos criar a modelagem, e demonstrar a ferramenta TollBar

Para inserir uma tabela na rea de trabalho clique no campo inserir tabela no TollBar

Aps a insero da tabela na rea de trabalho, clique duas vezes em cima da mesma, onde aparecer tabela de edio. Nesta ser possvel inserir os seguintes dados: nome da tabela, tipo de tabela, nome dos campos, tipo de atributos e ndices.

60

Este campo ser utilizado para o nome da tabela. Esta lista permite escolher o tipo de tabela a ser utilizado.

61

Estas informaes esto relacionados coluna e o tipo de dado que ser includo no campo da tabela. Na opo Columm Name ser colocado o nome do campo, DataType o tipo de dado, NN se for nulo AI quando for automtica a incrementao do campo.

Fazendo o relacionamento entre as tabelas

Aps as tabelas montadas ser possvel fazer os relacionamentos entre elas utilizando o TollBar.

62

Para excluir uma ligao no desejada clique no boto direto do mouse sobre o objeto que deseja excluir e selecione a opo Delete Object.

Relation Editor
Para alterar o tipo de relacionamento entre duas tabelas utilize a opo Edit Object. A janela Editor de Relacionamento possibilita alterar os tipos de relacionamento entre tabelas e configurar o tipo de visualizao destas tabelas. Relation Name O nome do relacionamento Relation Kind

Esta opo ser utilizada para definir o tipo de relacionamento.

63

Conexo com o Banco de Dados e transferncia das tabelas


Esta ferramenta permite a criao automtica das tabelas no gerenciador de base de dados (SGBD). Para tal operao necessrio que a modelagem esteja concluda e suas tabela devidamente relacionadas. Primeiramente deve-se conectar ao banco utilizando o menu principal na opo Database submenu Connect to Database Surgir um janela onde o usurio define o banco a ser usado, o host, a base de dados e um nome de identificao caso o usurio tenha mais de um tipo de acesso base de dados.O procedimento de ser feito com a escolha do banco, neste caso ser utilizada o MySql. Clique sobre o banco definido e depois sobre o boto New Database Connection.

64

Nesta janela ser inserida as informaes para a conexo com o SGBD. Os dados cadastrados ficaro armazenados para quando for necessrio fazer uma conexo com o MySql.

Com o preenchimento dos campos acima aparecer a janela inicial para que a conexo seja efetuada. Clique o boto Connect para iniciar.

65

Para que as tabelas sejam transferidas ser necessrio executar o sincronizador de Base de Dados.

A janela de conexo possui uma configurao prvia que poder ser alterado pelo usurio. As opes existentes devem ser bem analisadas antes de importar o modelo para a base de dados. Pois caso existam tabelas na base de dados escolhida ao fazer a importao de um novo modelo, os dados j existentes na base de dados podero ser excludos ou permanecer dependendo da opo escolhida. Iremos esclarecer estas funes abaixo.

66

DataBase Synchronisacion
Possui as seguintes opes: DataBase Connection: O nome da base de dados a ser conectada. Caso exista a necessidade de alterar a conexo (base de dados) ser possvel clicando no boto. Don't Delete existings Tables: Esta opo permite que sejam includas novas tabelas na base de dados sem excluir tabelas j existentes. Caso haja uma tabela ou mais com o mesmo nome que o modelo, permanecer a do modelo que est sendo exportado. Execute Standard Insert New Create: 67

Executa uma insero padro na criao de novas tabelas. Para exportar os dados para o SGBD clique Para fechar a janela de sincronizadora clique no

Incluir, excluir e alterar os dados da tabela

Existe a possibilidade de manipular os dados das tabelas utilizando o editor de tabelas. Clique com o boto direito do mouse sobre a tabela e selecione Edit Table Data.

Query Editor Nesta janela poder inserir e excluir dados de uma tabela especfica.

68

Table Na caixa de listagem selecione a tabela a ser manipulada. Data Base Connection O nome da Base de Dados que est conectada. Para inserir um dado na tabela selecione o campo da chave primaria e digite o dado. Aps a digitao de um ou mais dados salve utilizando o boto Para utilizar comandos SQL acione o boto Automaticamente surgir no campo edit query com comando bsico do select. Neste campo podero ser digitados os comando SQL.

69

Para inserir um dado na tabela selecione o campo da chave primaria e digite o dado. Aps a digitao utilizando a tecla tab poder ir para o prximo campo e inserir novos dados.

70