SGBD no Linux: MySql

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

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

 

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

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?