DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Artigo SQL Magazine 1 - SGBD no Linux: MySql

Artigo da Revista SQL Magazine - Edição 1.

Esse artigo faz parte da revista SQL Magazine edição 01. Clique aqui para ler todos os artigos desta edição

SGBD no Linux: MySql

 

Em se tratando de soluções em banco de dados para o linux, um dos pré-requisitos é a flexibilidade na aquisição da licença do produto. Este fator é também verdade para a maioria dos softwares para este sistema operacional. o MySQL traz, além de uma política de licenciamento bastante flexível, salvo algumas exceções, recursos que fazem so produto uma solução ideal para ser utilizado em ambiente Linux.

 

O MySQL é conhecido por ser um servidor de banco de dados extremamente rápido e robusto, configurando-se numa das soluções de menor custo  para redes mistas onde, por exemplo, temos estações clientes com Windows e servidores com Linux. É um Banco de dados utilizado principalmente em servidores web para persistência de dados em sites, foi desenvolvido pela T.c.X. DataKonsultAB (http://www.tcx.se) e está disponível para download em http://www.mysql.com.

Ao contrário do que se pensa, O MySQL não é totalmente “free”. Com relação a sua política de licenciamento podemos destacar que ele é grátis para ser utilizado tanto em uso privado como comercial, existindo algumas restrições para aplicações a serem utilizadas em ambiente Windows ou quando for distribuído como parte integrante de uma solução.

 

Além das vantagens citadas anteriormente, podemos destacar:

·         Possui versões disponíveis para vários sistemas operacionais, entre eles FreeBSD, Unix, Mac OS X, OS/2 Warp 3 e 4, Solaris, SunOS, Windows 9x, Me, NT, 2000 e XP.

·         Facilidade de instalação e administração do Banco de Dados.

·         Capacidade de gerenciamento de um número ilimitado de usuários simultâneos.

·         Alta capacidade de manipulação de registros (mais de 50.000.000 de registros por tabela).

·         Execução de comandos super otimizada;

·         Simples e e! ciente sistema de privilégio de usuários.

 

Como desvantagens, podemos destacar:

·         Não suporta transações (Commit, rollback, níveis de isolamento )

·         Não faz lock de linhas na atualização

·         Não suporta constraints (Chave primária e chave estrangeira, com capacidade de habilitar/desabilitar ou dropar/adicionar. )

·         Não tem recursos contra falhas no desligamento do banco durante atualizações de dados.

·         Não executa backup consistente com a base de dados no ar e se atualizações estiverem sendo efetuadas.

 

A versão utilizada aqui do MySQL é a 3.23. O MySQL também está disponível na versão MySQL/Max, que disponibiliza através de configurações adicionais o suporte a transações e foreign keys para determinados tipos de tabelas. A versão 4.0, em desenvolvimento, inclui o suporte completo a transações, além de suportar locks de linhas. Para versões futuras estão previstas as implementações de backup on-line e recursos de recuperação segura contra falhas no desligamento. Mais informações estão disponíveis em http://www.mysql.com/products/mysql-4.0/index.html;

 

Instalação No Linux

Os arquivos de instalação do MySql Servidor e Cliente estão disponíveis para download em http://www.mysql.com.

 

1)     Instale o servidor com o comando: Shell do Linux>

rpm –ivh MySQL-3.23.53a-1.i386.rpm

 

2)     Instale o cliente com o comando: Shell do Linux>

rpm –ivh MySQL-client-3.23.53a-1.i386.rpm

 

3)     Depois da instalação teremos que definir uma senha para o usuário root com o comando: Shell do Linux>

mysqladmin –u root –p password ‘senha’

 

Ele pedirá para confirmar a senha, pois no primeiro acesso após a instalação a mesma não estará ainda definida.

O tempo total de instalação foi de aproximadamente 2 minutos sem a necessidade de configurações adicionais, disponibilizando de imediato o banco para uso.

Durante a instalação do MySQL é criado um banco de dados, chamado mysql, contendo cinco tabelas: db, host, user, tables_priv e columns_priv, que implementam o controle de acesso aos dados no MySQL.

 

Conectando ao Banco

Para entrar no banco digite:

 

Shell do Linux> mysql –u root –p

 

         ‘-p’ Pedirá a senha do usuário.

 

Welcome to the MySQL monitor. Commands end with ; or \g.
Type 'help' for help.
mysql>

A partir da entrada no MySQL Monitor, é possível criar uma base, usar uma já existente, consultar informações etc. Alguns comandos administrativos podem ser visualizados digitando help, \h ou ? na linha de comando. Para consultar as bases existentes digite:

 

mysql> show databases;

 

Nota-se que o comando foi seguido por um ponto-e-vírgula (;). Quase todos os comandos no MySQL são seguidos por um ponto-e-vírgula. Caso este não seja digitado, o cursor passará para a próxima linha do prompt aguardando o complemento do comando.

 

Criando um Banco de dados

No MySQL os bancos de dados são implementados como diretórios contendo arquivos que correspondem a tabelas do mesmo.

Para criar uma base digite:

 

mysql> create database sqlmagazine;

 

Após a execução deste comando, será criado no diretório de dados do MySQL um subdiretório vazio com o nome sqlmagazine. Ocorrerá um erro se o banco de dados sqlmagazine já existir ou se o usuário logado não possuir o privilégio apropriado para criação de uma base de dados.

Uma vez criada a base de dados deve-se “usá-la”, ou seja, torná-la ativa para que sejam manipulados os objetos e dados contidos nesta base. Digite:

 

mysql> use sqlmagazine;

 

Criando Tabelas

Antes de criar uma tabela, é interessante destacarmos os Tipos de Dados mais utilizados no MSQL:

 

 

CHAR(M) – É usado para representar strings de tamanho fixo, onde M pode ter de 1 à 255 caracteres.

 

VARCHAR(M) – Também é usada para representar strings, sendo mais flexível do que o tipo CHAR, por armazenar o dado de forma variável, onde M pode ter de 0 à 255 caracteres. É aconselhável usar este tipo de dados no lugar do CHAR, uma vez que só é armazenado a quantidade de caracteres que o dado contém. Para o tipo CHAR, todo o “tamanho” referente ao campo é alocado, mesmo que ele não preencha todos os caracteres.

 

INT [(M)] [Unsigned] – Este tipo armazena inteiros que variam de  -2147483648 a 2147483647 com sinal. Se for usado Unsigned, o intervalo será 0 a 4294967295.

 

FLOAT [(M,D)] – Representa números decimais de precisão simples.

 

DOUBLE [(M,D)] – Representa números decimais de precisão dupla.

 

DATE – Armazena datas. O formato default é ‘AAAA-MM-DD’ Intervalo de ‘1000-01-01’ a ‘9999-12-31’.

 

DATETIME – Armazena data e hora no formato ‘AAAA-MM-DD HH:MM:SS’. Intervalo de ‘1000-01-01 00:00:00’ a ‘9999-12-31 23:59:59’.

 

TEXT / BLOB – Este tipo de dado é utilizado para strings de 0 ate 65535 caracteres de armazenamento.

 

SET (“valor1”,”valor2”,...) [NOT NULL] – Permite especificar uma lista com até 64 valores dos quais um ou mais podem ser atribuídos a coluna.

Exemplo: sexo SET(“M”,”F”) NOT NULL;

                 transporte set (“caminhao”,”furgao”);

 

Uma vez conhecidos os tipos de dados mais utilizados, é possível criar as tabelas do banco de dados. Para tal digite:

 

mysql> create table cliente (

> codigocliente INT NOT NULL,

 > nome VARCHAR(30),

 > endereco VARCHAR (30),

 > cidade VARCHAR (30),

 > uf CHAR (2),

 > PRIMARY KEY(codigocliente));

 

Para consultar as tabelas existentes, digite na base em uso:

 

mysql> show tables;

 

Para consultar as colunas da tabela cliente criada anteriormente, digite:

mysql> show columns from cliente;

 

Atribuindo Privilégios

Como citado anteriormente, o MySQL possui um sistema simples e eficiente para atribuição de privilégios de acesso a usuários. No nosso exemplo, estamos conectados com o usuário local root e com o banco sqlmagazine em uso. Poderíamos atribuir direitos de acesso a tabela cliente criada em nosso exemplo a outro usuário através do comando

 

mysql> grant select on cliente  to nomedousuario;

 

A opção de grant é bem mais abrangente que o simples acesso a uma tabela por determidado usuário. Vejamos a sintaxe geral do comando:

 

grant privilégio [ (colunas) ][, privilégio [ (colunas)... ]

     on {*.* | * | bd.* | bd.tabela | tabela }

          to usuário@host [ identified by ‘senha’] [, ...] [ with grant option ]

 

Onde os termos entre colchetes são opcionais, os termos entre parênteses representam um ou mais elementos e os termos entre chaves são obrigatórios com os possíveis valores indicados. Para os termos em destaque temos:

 

Privilégio: Se refere ao privilégio a ser atribuído. Podemos destacar os seguintes:

all [ privileges ] - Todos os Privilégios.

alter -Alterar tabelas e índices.

create - Criar bancos de dados e tabelas.

delete - Eliminar linhas de tabelas.

drop - Eliminar bancos de dados e tabelas.

index - Criar e eliminar índices.

insert - Inserir linhas em tabelas.

select - ler dados de tabelas.

update - alterar linhas em tabelas.

usage - sem privilégios.

 

Colunas: Nomes das colunas às quais os privilégios devem ser aplicados

On: Especifica o nível do privilégio

*.* - Atribui os privilégios a todas as tabelas em todos os bancos de dados do servidor.

* - Atribui os privilégios a todas as tabelas do banco de dados corrente.

bd.* - Atribui os privilégios a todas as tabelas do banco de dados especificado.

bd.tabela - Atribui os privilégios a todas colunas da tabelas especificada.

tabela - Atribui os privilégios a todas colunas da tabelas especificada no banco de dados default.

 

To: Especifica o(s) nome(s) do(s) usuário(s) a ter(em) privilégios atribuídos. Formato usuário@host.

usuário - Nome do usuário ou string vazio para especificar um usuário anônimo.

host - Nome do host, ou endereço IP.

Identified By - Atribui uma senha ao usuário, ou altera a senha de um usuário existente.

 

with Grant option: Permite ao usuário atribuir a outros usuários qualquer um dos seus privilégios no nível de privilégio especificado.

 

Manipulando o Banco de dados

A manipulação dos dados armazenados num banco se dá de quatro formas: inserção, alteração, deleção e seleção de um ou mais registros. Com base na tabela de cliente criada anteriormente seguem alguns exemplos:

Para inserir um registro numa tabela já existente digite:

 

mysql> INSERT INTO cliente (codigocliente, nome, endereço, cidade, uf)

VALUES (1,”JOSE DA SILVA”,”RUA ALTA, 30”, “RIO DE JANEIRO”,”RJ”);

 

mysql> INSERT INTO cliente (codigocliente, nome, endereço, cidade, uf)

VALUES (2,”MARIA DA SILVA”,”RUA BAIXA, 25”, “NITEROI”,”RJ”);

 

 

mysql> INSERT INTO cliente (codigocliente, nome, endereço, cidade, uf)

VALUES (3,”JOAO SOUZA”,”RUA ESTREITA, 50”, “SAO PAULO”,”SP”);

 

Para selecionar registro(s) de uma tabela já existente, digite:

 

mysql> SELECT * FROM cliente;

Mostrará todos os registros da tabela.

 

mysql> SELECT * FROM cliente WHERE uf = “SP”;

Mostrará todos os registros com a uf = “SP”.

 

mysql> SELECT * FROM cliente WHERE uf = “RJ” ORDER BY nome;

O “Order By” trará os registros ordenados por nome.

 

mysql> SELECT * FROM cliente WHERE nome LIKE “J%”;

 

O “LIKE” substitui o “=” para fazer uma procura estimada e não exata. O “%” funciona como um coringa que substitui qualquer caractere.

 

Para alterar registro(s) numa tabela já existente, digite:

mysql> UPDATE cliente SET endereco = “RUA ESTRELA, 65” WHERE codigocliente = 3;

 

Para apagar registro(s) numa tabela já existente, digite:

mysql> DELETE FROM cliente WHERE codigocliente = 3;

 

Operadores Lógicos

AND (&&)

mysql> SELECT * FROM cliente WHERE uf = “RJ” AND cidade = “NITEROI”;

mysql> SELECT * FROM cliente WHERE uf = “RJ” && cidade = “NITEROI”;

Mostrará os registros que tenha uf = “RJ” e ao mesmo tempo a cidade = “NITEROI”

 

OR ( || )

mysql> SELECT * FROM cliente WHERE uf = “RJ” OR cidade = “SAO PAULO”;

mysql> SELECT * FROM cliente WHERE uf = “RJ” || cidade = “SAO PAULO”;

Mostrará os registros que tenha uf = “RJ” ou cidade = “SAO PAULO”

 

NOT (!)

mysql> SELECT * FROM cliente WHERE uf != “RJ” ;

Mostrará os registros que tenha uf diferente “RJ”.

 

Modificando uma Tabela

Para Renomear uma tabela já existente, digite:

mysql> ALTER TABLE cliente  RENAME clientenovo;

 

Para adicionar uma coluna a uma tabela já existente, digite:

mysql> ALTER TABLE clientenovo ADD datanasc DATE;

 

Para alterar uma coluna de uma tabela já existente digite:

mysql> ALTER TABLE clientenovo CHANGE nome nomecliente VARCHAR(30);

 

Para remover uma coluna de uma tabela já existente, digite:

mysql> ALTER TABLE clientenovo DROP complemento;

 

Um pequeno exemplo

Segue um pequeno exemplo escrito em Java mostrando o acesso ao banco e as tabelas criadas neste artigo. A aplicação não disponibiliza uma interface gráfica, ela simplesmente efetua a conexão com o banco e lista num console os dados da tabela CLIENTENOVO criada anteriormente.

O Driver JDBC MySQL utilizado para o exemplo pode ser baixado no endereço http://www.mysql.com/downloads/api-jdbc-stable.html.

 

import java.sql.*;

public class Principal

{ public static void main (String[] args)

{ Connection conn = null;

try{

//registra o driver do mysq no jdbc

DriverManager.registerDriver

( new com.mysql.jdbc.Driver() );

//veri! ca se o driver está registrado e abre uma

conexão com o banco de acordo

//com os parâmetros do método getConnection

conn =DriverManager.getConnection

(“jdbc:mysql://localhost/sqlmagazine?user=root”);

}

catch (SQLException e){

System.out.println (‘\n’ + “Erro na conexão com o banco.”);

e.printStackTrace();

System.exit(1);

}

try{

//envia o comando para o banco de dados para que /

//ele seja “compilado” pelo banco

//otimizando dessa forma a resposta do banco

//quando o mesmo for executado

PreparedStatement pstmt = conn.

prepareStatement(“SELECT * FROM CLIENTENOVO”);

//executa o comando preparado e retorna um

//ResultSet para ser manipulado pela aplicação

ResultSet rs = pstmt.executeQuery();

while ( rs.next() ){

System.out.println(rs.getInt(“CODCLIENTE”) + “ - “ +

rs.getString(“NOMECLIENTE”));

}

pstmt.close();

conn.close();

}

catch (SQLException e){

System.out.println (‘\n’ +

“Erro ao recuperar dados no banco.”);

e.printStackTrace();

System.exit(1);

}

}

}

Conclusão

Até então a ausência de transações vinha se mostrado um ponto negativo para a utilização do Mysql de forma mais abrangente, embora existam muitas aplicações, como por exemplo as de armazenamento de conteúdo dinâmico para websites, que não exijam transações e se beneficiem sobremaneira do ganho de performance obtido com a sua ausência, uma vez que desfazer programaticamente uma operação com múltiplas tabelas é trabalhoso e não muito utilizado.

Hoje, esta questão já não pesa tanto para utilização do MySQL devido ao suporte parcial a transações, constraints e foreign keys. No futuro o próximo o suporte completo a transações, locks de linhas durante a atualização, backup on-line e recuperação segura agregarão valores a benefícios já existentes como alta performance, simplicidade de instalação, manutenção reduzida e versões para vários sistemas operacionais, fazendo com que o MySQL seja utilizado de forma mais abrangente.

 

 

por Clementino Leal


Equipe Devmedia
Noticias/Dicas/Artigos publicados.
O que você achou deste post?

    2 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Roger Flores Taipina
Nossa... esse artigo deve ser MUITO antigo... pois falar que o MySQL nao aceita chaves de restrição e controles de transações... o autor deve estar citando a versão 3 do banco... pessoal do DEVMEDIA, seria muito interessante mostrar a data da postagem do artigo, para posicionar o leitor da obsolência do artigo.... ou então não exibir os artigos antigos, isto atrapalha o desenvolvimento intelectual tecnologico.

Para a época, o artigo deve ter sido útil.
[há +1 ano] - Responder

 

Devmedia - Equipe De Moderacao
OLá, estamos providenciando essa modificação.
[há +1 ano] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03