Beruflich Dokumente
Kultur Dokumente
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.
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.
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.
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.
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.
No normalizada
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.
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
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.
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.
13
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
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.
20
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.
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);
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:
Adicionando colunas
O comando ADD o responsvel pela insero de uma nova coluna. ALTER TABLE livros2 ADD editora_id INT; #onde ADD adicionar
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.
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.
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.
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 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
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
YEAR[(2 | 4)]
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
Testa se o campo no contm um valor Testa se o campo tem valores entre um e outro
BETWEEN
40
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.
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.
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
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 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';
49
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.
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
53
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
55
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
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.
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.
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
63
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
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