BREVE HISTÓRIA DO MYSQL O MySQL surgiu a partir da necessidade da equipe que criou o SGBD, de utilizar algum mecanismo que permitisse a conexão de tabelas criadas na linguagem SQL para um determinado fim. A princípio, o grupo iria utilizar o mSQL, mas logo perceberam que esta ferramenta não era rápida o suficiente para atender às necessidades do projeto. O jeito foi criar uma solução própria. Nascia o MySQL. O MySQL foi criado por Michael Widenius na companhia suíça TcX.Por volta de 1979 Michael desenvolveu um banco de dados chamado UNIREG, sendo rescritos em várias linguagens desde então" [YAR 99]. Em 1994, a empresa TcX começou o desenvolvimento de aplicações baseadas na Web, tendo como base o banco UNIREG, porém esse banco possuía muito "overhead" para obter sucesso em uma aplicação para geração de páginas dinâmicas na Web. Então a empresa TcX começou a procurar por outro banco o mSQL, uma ferramenta baseada em SQL mas com características pobres não possuindo por exemplo suporte a índices, e com desempenho inferior ao UNIREG. Foi então que o desenvolvedor do banco UNIREG contatou o David Hughes criador do mSQL, para saber do interesse dele em unir os dois bancos. Sendo positivo o interesse de David , a empresa TcX resolveu desenvolver um novo banco, mas mantendo ao máximo a compatibilidade com mSQL. TcX foi esperta o suficiente para não reinventar o que já estava bem feito, ela construiu seu servidor baseado na estrutura que já estava montada do UNIREG e utilizou grande número de utilitários escritas para mSQL e fez API's para o novo servidor praticamente iguais ao mSQL. Como resultado usuários do mSQL que decidissem mudar para o novo servidor da TcX, teriam apenas que fazer pequenas e simples mudanças nos códigos existentes. Então foi em maio de 1995 que, definitivamente, a primeira versão do MySQL foi lançada. Um dos parceiros da TcX sugeriu a distribuição do servidor na Internet, o objetivo disso era a utilização de um modelo pioneiro desenvolvido por Aladdin Peter Deutsch. O resultado foi um maior flexibilidade em sem "copyright", que fez do MySQL mais difundido gratuitamente do que mSQL. INTRODUÇÃO O MySQl é o mais popular sistema de gerenciamento de banco de dados SQL Open Source. (há também a versão Enterprise que oferece suporte e algumas ferramentas melhores e mais otimizadas, que custa em média US$ 595 ao ano.) É desenvolvido, distribuído e tem suporte da MySQL AB. A MySQL AB é uma empresa comercial, fundada pelos desenvolvedores do MySQL, cujos negócios é fornecer serviços relacionados ao sistema de gerenciamento de banco de dados MySQL. Empresas como Yahoo! Finance, MP3.com, Motorola, NASA, Silicon Graphics e Texas Instruments usam o MySQL em aplicações de missão crítica. A Wikipédia é um exemplo de utilização do MySQL em sites de grande audiência.O programa MySQL (R) é um servidor robusto de bancos de dados SQL (Structured Query Language - Linguagem Estruturada para Pesquisas) muito rápido, multi-tarefa e multi-usuário. O Servidor MySQL pode ser usado em sistemas de produção com alta carga e missão crítica bem como pode ser embutido em programa de uso em massa.Sua modelagem de dados é Relacional. Toda modelagem e relacionamento do banco de dados podem ser feitas com uma ferramenta gratuita, chamada Worbench. O MySQL Workbench é uma ferramenta gráfica para modelagem de dados. Esta ferramenta possibilita trabalhar diretamente com objetos schema, além de fazer a separação do modelo lógico do catálogo de banco de dados. Toda a criação dos relacionamentos entre as tabelas podem ser baseados em chaves estrangeiras. Outro recurso que a ferramenta possibilita é realizar a engenharia reversa de esquemas do banco de dados, bem como gerar todos os scripts em SQL. MySQL Workbench apresenta opções que não o deixam para trás em comparação aos outros programas para modelagem de dados. A ferramenta faz sincronia dos modelos de banco de dados, importa e exporta modelos do DBDesigner4, bem como exporta scripts SQL. A modelagem dos seus bancos de dados pode assumir níveis conceituais, lógicos e físicos. MySQL Workbench apresenta uma arquitetura extensível, sendo possível visualizar a representação de tabelas, funções, entre outros. Há ainda o MySQL Gui Tools que é um poderoso e completo pacote de ferramentas para administração e manutenção de bancos de dados MySQL com interfaces gráficas. O Gui Tools é uma ferramenta inteiramente gratuita. O MySQL Gui Tools inclui as seguintes ferramentas: MySQL Migration Toolkit: é uma framework que possibilita a rápida migração de seus bancos de dados MySQL. Usando um Assistente de ajuda para utilização, o MySQL Migration Toolkit implementa uma metodologia comprovada e o executa através de medidas necessárias para concluir com êxito uma migração de um projeto de banco de dados; MySQL Administrator: ferramenta visual que facilita a tarefa de administração e controle do seu ambienteMySQL, ganhando significativamente melhor visibilidade das suas bases de dados que estiverem em funcionamento. MySQL Administrator agora integra gestão e de manutenção de banco de dados em um único ambiente, com uma clara e intuitiva interface gráfica. MySQL Query Browser: é a mais fácil ferramenta visual para criação, execução e otimização de consultas SQL para o seu MySQL Database Server. O MySQL Query Browser dá-lhe um conjunto completo de ferramentas para arrastar e soltar, conseguindo assim, construir visualmente, analisés e gerenciamento de suas queries (consultas). Principais Características do MySQL A seguinte lista descreve algumas das características mais importantes do Programa de Banco de Dados MySQL. Portabilidade e Escrito em C e C++. Testado com um amplo faixa de compiladores diferentes. Funciona em diversas plataformas, como Windows, Mac OS e Linux. Utiliza o GNU Automake, Autoconf, e Libtool para portabilidade. APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby e Tcl estão disponíveis. Suporte total a multi-threads usando threads diretamente no kernel. Isto significa que se pode facilmente usar múltiplas CPUs, se disponível. Fornece mecanismos de armazenamento transacional e não transacional. Tabelas em disco (MyISAM) baseadas em árvores-B extremamente rápidas com compressão de índices. É relativamente fácil se adicionar outro mecanismo de armazenamento. Isto é útil se você quiser adicionar uma interface SQL a um banco de dados caseiro. Um sistema de alocação de memória muito rápido e baseado em processo(thread). Joins muito rápidas usando uma multi-join de leitura única otimizada. Tabelas hash em memória que são usadas como tabelas temporárias. Funções SQL são implementadas por meio de uma biblioteca de classes altamente otimizada e com o máximo de performance. Geralmente não há nenhuma alocação de memória depois da inicialização da pesquisa. O código do MySQL foi testado com Purify (um detector comercial de falhas de memória) e também com o Valgrind, uma ferramenta GPL Disponível como versão cliente/servidor ou embutida(ligada). Tipos de Coluna Aceita diversos tipos de campos: tipos inteiros de 1, 2, 3, 4 e 8 bytes com e sem sinal, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET e ENUM. Registros de tamanhos fixos ou variáveis. Comandos e Funções Completo suporte a operadores e funções nas partes SELECT e WHERE das consultas. Por exemplo: mysql> SELECT CONCAT(first_name, " ", last_name) -> FROM nome_tbl -> WHERE income/dependents > 10000 AND age > 30; Suporte pleno às cláusulas SQL GROUP BY e ORDER BY. Suporte para funções de agrupamento (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX() e MIN()). Suporte para LEFT OUTER JOIN e RIGHT OUTER JOIN com as sintaxes SQL e ODBC. Alias em tabelas e colunas são disponíveis como definidos no padrão SQL92. DELETE, INSERT, REPLACE, e UPDATE retornam o número de linhas que foram alteradas (afetadas). É possível retornar o número de linhas com padrão coincidentes configurando um parâmetro quando estiver conectando ao servidor. O comando específico do MySQL SHOW pode ser usado para devolver informações sobre bancos de dados, tabelas e índices. O comando EXPLAIN pode ser usado para determinar como o otimizador resolve a consulta. Nomes de funções não conflitam com nomes de tabelas ou colunas. Por exemplo, ABS é um nome de campo válido. A única restrição é que para uma chamada de função, espaços não são permitidos entre o nome da função e o ‘(’ que o segue. Você pode misturar tabelas de bancos de dados diferentes na mesma pesquisa (como na versão 3.22). Segurança Um sistema de privilégios e senhas que é muito flexível, seguro e que permite verificação baseada em estações/máquinas. Senhas são seguras porque todo o tráfico de senhas é criptografado quando você se conecta ao servidor. Escalabilidade e limites Lida com bancos de dados enormes. Usamos o Servidor MySQL com bancos de dados que contém 50.000.000 registros e sabemos de usuários que usam o Servidor MySQL com 60.000 tabelas e aproximadamente 5.000.000.000 de linhas. São permitidos até 32 índices por tabela. Cada índice pode ser composto de 1 a 16 colunas ou partes de colunas. O tamanho máximo do índice é de 500 bytes (isto pode ser alterado na compilação do MySQL). Um índice pode usar o prefixo de campo com um tipo CHAR ou VARCHAR. A Versão 3.22 do MySQL tem suporte para tabelas com limite de tamanho até 4G. Com o novo MyISAM no MySQL versão 3.23 o tamanho máximo foi expandido até 8 milhões de terabytes (2 ^ 63 bytes). Com este tamanho de tabela maior permitido, o tamanho máximo efetivo das tabelas para o banco de dados MySQL é normalmente limitado pelas restrições do sistema operacional quanto ao tamanho dos arquivos, não mais por limites internos do MySQL. A seguinte tabela lista alguns exemplos do limite do tamanho de arquivos do sistema operacional: Sistema Operacional Linux-Intel 32 bit Linux-Alpha Solaris 2.5.1 Solaris 2.6 Solaris 2.7 Intel Solaris 2.7 ULTRA-SPARC Limite do tamanho do arquivo 2G, muito mais usando LFS 8T (?) 2G (É possível 4GB com patch) 4G (pode ser alterado com parâmetro) 4G 8T (?) No Linux 2.2 você pode ter tabelas maiores que 2 GB usando o patch LFS para o sistema de arquivos ext2. No Linux 2.4 já existem patches para o sistema de arquivos ReiserFS para ter suporte a arquivos maiores. A maioria das distribuições atuais são baseadas no kernel 2.4 e já incluem todos os patches Suporte a Arquivos Grandes (Large File Support - LFS) exigidos. No entanto, o tamanho máximo disponível ainda depende de diversos fatores, sendo um deles o sistema de arquivos usado para armazenar as tabelas MySQL. Para um visão mais detalhada sobre LFS no Linux, dê uma olha na página Andreas Jaeger's "Large File Support in Linux" Por padrão, o MySQL cria tabelas MyISAM com uma estrutura interna que permite um tamanho máximo em torno de 4G. Você pode verificar o tamanho máximo da tabela com o comando SHOW TABLE STATUS ou com o myisamchk -dv nome_tabela. Se você precisa de tabelas maiores que 4G (e seu sistema operacional suporta arquivos grandes), a instrução CREATE TABLE permite as opções AVG_ROW_LENGHT e MAX_ROWS. Use estas opções para criar uma tabela que possa ter mais de 4GB. Você pode também alterar isso mais tarde com ALTER TABLE. Outros modos se contornar o limite do tamanho do arquivo das tabelas MyISAM são os seguintes: Se sua tabela grande será somente leitura, você poderá usar o myisampack para unir e comprimir várias tabelas em uma. mysisampack normalmente comprime uma tabela em pelo menos 50%, portanto você pode obter, com isso, tabelas muito maiores. Outra opção para contornar o limite de tamanho de arquivos do sistema operacional para arquivos de dados MyISAM usando a opção RAID. O MySQL incluí uma biblioteca MERGE que permite acessar uma coleção de tabelas idênticas como se fosse apenas uma. Conectividade Os clientes podem se conectar ao servidor MySQL usando sockets TCP/IP, em qualquer plataforma. No sistema Windows na família NT (NT, 2000 ou XP), os clientes podem se conectar usando named pipes. No sistema Unix, os clientes podem se conectar usando arquivos sockets. A interface Connector/ODBC fornece ao MySQL suporte a progras clientes que usam conexão ODBC (Open-DataBase-Connectivity). Por exemplo, você pode usar o MS Access para conectar ao seu servidor MySQL. Os clientes podem ser executados no Windows ou Unix. O fonte do Connector/ODBC está disponível. Todas as funções ODBC são suportadas, assim como muitas outras. Localização O servidor pode apresentar mensagem de erros aos clientes em várias línguas.. Suporte total para vários conjuntos de caracteres, que incluem ISO-88591 (Latin1), big5, ujis e mais. Por exemplo, os caracteres Escandinavos ‘â’, ‘ä’, ‘ö’ são permitidos em nomes de tabelas e colunas. Todos os dados são armazenados no conjunto de caracteres escolhido. Todas as comparações em colunas de seqüências caso-insensitivo. A ordenação é feita de acordo com o conjunto de caracteres escolhido (o modo sueco por padrão). É possível alterar isso quando o servidor MySQL é iniciado. Para ver um exemplo de várias ordenações avançadas, procure pelo código de ordenação Tcheca. O Servidor MySQL suporta diversos conjuntos de caracteres que podem ser especificados em tempo de compilação e execução. Clientes e Ferramentas O servidor MySQL foi construído com suporte para instruções SQL que verificam, otimizam e reparam tabelas. Estas instruções estão disponíveis a partir da linha de comando por meio do cliente myisamcheck, O MySQL inclui também o myisamchk, um utilitário muito rápido para realizar estas operações em tabelas MyISAM. Todos os programas MySQL podem ser chamados com as opções --help ou -? para obter ajuda online. Com tantas vantagens e ferramentas gratuitas, você ainda escolheria outro SGDB para sua empresa?