SGBD no Linux: MySql

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

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 do 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:

Como desvantagens, podemos destacar:

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çãoNo 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:

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 determinado 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:

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

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

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.

Artigos relacionados