MySQL, o mais popular sistema de gerenciamento
de banco de dados SQL Open Source, é
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. See
Secção 1.3, “Visão Geral da MySQL AB”.
O web site do MySQL
(http://www.mysql.com/)
fornece informações mais recentes sobre e programa
MySQL e a MySQL AB.
O MySQL é um sistema de gerenciamento de bancos de dados.
Um banco de dados é uma coleção de dados estruturados. Ele pode ser qualquer coisa desde uma simples lista de compras a uma galeria de imagens ou a grande quantidade de informação da sua rede coorporativa. Para adicionar, acessar, e processar dados armazenados em um banco de dados de um computador, você necessita de um sistema de gerenciamento de bancos de dados como o Servidor
MySQL. Como os computadores são muito bons em lidar com grandes quantidades de dados, o gerenciamento de bancos de dados funciona como a engrenagem central na computação, seja como utilitários independentes ou como partes de outras aplicações.O MySQL é um sistema de gerenciamento de bancos de dados relacional.
Um banco de dados relacional armazena dados em tabelas separadas em vez de colocar todos os dados um só local. Isso proporciona velocidade e flexibilidade. A parte
SQLdo ``MySQL'' atenda pela ``Structured Query Language - Linguagem Estrutural de Consultas''. SQL é linguagem padrão mais comum usada para acessar banco de dados e é definida pelo Padrão ANSI/ISO SQL. (O padrão SQL está vem evoluindo desde 1986 e existem diversas versões. Neste manual, ''SQL-92'' se refere ao padrão liberado em 1992, ''SQL-99'' se refere ao padrão liberado em 1999, e ''SQL:2003'' se refere a versão do que esperamos que seja liberado no meio de 2003. Nós usamos o termo ''o padrão SQL'' indicando a versão atual do Padrão SQL em qualquer momento).O é MySQL um software
Open Source.Open Sourcesignifica que é possível para qualquer um usar e modificar o programa. Qualquer pessoa pode fazer download doMySQLpela Internet e usá-lo sem pagar nada. Se você quiser, você pode estudar o código fonte e alterá-lo para adequá-lo às suas necessidades. OMySQLusa aGPL(GNU General Public License - Licença Pública Geral GNU) http://www.fsf.org/licenses, para definir o que você pode e não pode fazer com o software em diferentes situações. Se você sentir desconforto com aGPLou precisar embutir oMySQLem uma aplicação comercial¸ você pode adquirir a versão comercial licenciada conosco. See Secção 1.4.3, “Licenças do MySQL”.Por que usar o Banco de Dados MySQL?
O
servidor de banco de dados MySQLé extremamente rápido, confiável, e fácil de usar. Se isto é o que você está procurando, você deveria experimentá-lo. OServidor MySQLtambém tem um conjunto de recursos muito práticos desenvolvidos com a cooperação de nossos utilizadores. Você pode encontrar comparativos de performance doServidor MySQLcom outros gerenciadores de bancos de dados na nossa página de benchmark See Secção 5.1.4, “O Pacote de Benchmark do MySQL”.O
Servidor MySQLfoi desenvolvido originalmente para lidar com bancos de dados muito grandes de maneira muito mais rápida que as soluções existentes e tem sido usado em ambientes de produção de alta demanda por diversos anos de maneira bem sucedida. Apesar de estar em constante desenvolvimento, oServidor MySQLoferece hoje um rico e proveitoso conjunto de funções. A conectividade, velocidade, e segurança fazem com que oMySQLseja altamente adaptável para acessar bancos de dados na Internet.As características técnicas do MySQL
Para informações técnicas avançadas, veja Capítulo 6, Referência de Linguagem do MySQL. O
Programa de Banco de Dados MySQLé um sistema cliente/servidor que consiste de um servidorSQLmulti-tarefa que suporta acessos diferentes, diversos programas clientes e bibliotecas, ferramentas administrativas e diversas interfaces de programação (API's).Também concedemos o
Servidor MySQLcomo uma biblioteca multi-tarefa que você pode ligar à sua aplicação para chegar a um produto mais rápido, menor e mais fácilmente gerenciável.MySQL tem muitos softwares de colaboradores disponível.
É bem provável que sua aplicação ou linguagem favorita já suporte o
Servidor de Banco de Dados MySQL.
A pronúncia oficial do MySQL é ``Mai Ess Que
Ell'' (e não MAI-SEQUEL). Mas nós não ligamos se você
pronunciar MAI-SEQUEL ou de outra forma qualquer.
Quando começamos, tínhamos a intenção de usar o
mSQL para conectar às nossas tabelas
utilizando nossas rápidas rotinas de baixo nível (ISAM).
Entretanto, depois de alguns testes, chegamos a conclusão que o
mSQL não era rápido e nem flexível o
suficiente para nossas necessidades. Isto resultou em uma nova
interface SQL para nosso banco de dados, mas com praticamente a
mesma Interface API do mSQL. Esta API foi
escolhida para facilitar a portabilidade para códigos de
terceiros que era escrito para uso com mSQL
para ser portado facilmente para uso com o
MySQL.
A derivação do nome MySQL não é bem definida. Nosso diretório base e um grande número de nossas bibliotecas e ferramentas sempre tiveram o prefixo ``my'' por pelo menos 10 anos. A filha de Monty também ganhou o nome My. Qual das duas originou o nome do MySQL continua sendo um mistério, mesmo para nós.
O nome do golfinho do MySQL (nosso logo) é
Sakila. Sakila foi
escolhido pelos fundadores da MySQL AB de uma enorme lista de
nomes sugeridos pelos utilizadores em nosso concurso "Name the
Dolphin". O nome vencedor foi enviado por Ambrose Twebaze, um
desenvolvedor de programas open source de Swaziland, Africa. De
acordo com Ambrose, o nome Sakila tem as suas raízes em
SiSwati, a língua local de Swaziland. Sakila é também o nome
de uma cidade em Arusha, Tanzania, próxima ao país de orígem
de Ambrose, Uganda.
A seguinte lista descreve algumas das características mais
importantes do Progrma de Banco de Dados
MySQL. See Secção 1.5.1, “MySQL 4.0 in a Nutshell”.
Portabilidade e
Escrito em C e C++.
Testado com um amplo faixa de compiladores diferentes.
Funciona em diversas plataformas. See Secção 2.2.3, “Sistemas Operacionais suportados pelo MySQL”.
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. See Capítulo 12, Ferramentas de Clientes e APIs do MySQL.
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
MySQLfoi testado com Purify (um detector comercial de falhas de memória) e também com o Valgrind, uma ferramentaGPL(http://developer.kde.org/~sewardj/).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,SETeENUM. See Secção 6.2, “Tipos de Campos”.Registros de tamanhos fixos ou variáveis.
Comandos e Funções
Completo suporte a operadores e funções nas partes
SELECTeWHEREdas 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 BYeORDER BY. Suporte para funções de agrupamento (COUNT(),COUNT(DISTINCT ...),AVG(),STD(),SUM(),MAX()eMIN()).Suporte para
LEFT OUTER JOINeRIGHT OUTER JOINcom as sintaxes SQL e ODBC.Alias em tabelas e colunas são disponíveis como definidos no padrão SQL92.
DELETE,INSERT,REPLACE, eUPDATEretornam 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
MySQLSHOWpode ser usado para devolver informações sobre bancos de dados, tabelas e índices. O comandoEXPLAINpode 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. See Secção 6.1.7, “Tratamento de Palavras Reservadas no MySQL”.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 MySQLcom bancos de dados que contém 50.000.000 registros e sabemos de utilizadores que usam oServidor MySQLcom 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
CHARouVARCHAR.
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. See Secção 4.7.2, “Mensagens de Erros em Outras Línguas”.
Suporte total para vários conjuntos de caracteres, que incluem ISO-8859-1 (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. OServidor MySQLsuporta 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 omyisamchk, um utilitário muito rápido para realizar estas operações em tabelasMyISAM. See Capítulo 4, Administração do Bancos de Dados MySQL.Todos os programas
MySQLpodem ser chamados com as opções--helpou-?para obter ajuda online.
Esta seção discute as questões ``Quão estável é o MySQL?'' e ``Posso depender do MySQL neste projeto?''. Tentaremos deixar claro estes assuntos e responder algumas das questões mais importantes que dizem respeito a muito de nossos utilizadores. A informação nesta seção é baseada em dados colhidos da lista de discussão, que é muito ativa na identificação de problemas e assim como nos relatos de tipos de uso.
Originalmente, o código vem do início dos anos 80, fornecendo
um código estável e o formato de tabelas ISAM permanece
compatível com versões anteriores. Na TcX, a predecessora da
MySQLAB, o MySQL vem
trabalhando sem problemas em nossos projetos desde o meio de
1996. Quando o Programa de Banco de Dados
MySQL foi disponibilizado para um público maior,
nossos novos utilizadores rapidamente encontraram algumas partes de
``código sem testes''. Desde então, cada distribuição nova
teve menos problemas de portabilidade (mesmo com os novos
recursos implementados em cada uma destas versões)
Cada distribuição do Servidor MySQL foi
sendo usado, e os problemas tem ocorrido somente quando os
utilizadores começam a usar o código das ``áreas cinzentas.''
Naturalmente, novos utilizadores não sabem o que são as áreas
cinzentas; esta seção tenta indicar aquelas que são
conhecidas atualmente. As descrições lidam com a Versão 3.23
e 4.0 do Servidor MySQL. Todos os erros
conhecidos e relatados são corrigidos na última versão, com a
exceção dos bugs listados na seção de erros, os quais são
relacionados ao desenho. See Secção 1.8.6, “Erros Conhecidos e Deficiências de Projetos no MySQL”.
O Servidor MySQL é escrito em múltiplas
camadas com módulos independentes. Alguns dos novos módulos
estão listados abaixo com indicações de quão bem-testado foi
cada um deles.
Replicação --- Gamma
Grandes grupos de servidores usando replicação estão em uso, com bom resultados. O trabalho no aprimoramento dos recursos de replicação continua no
MySQL4.x.Tabelas
InnoDB--- Estável (na 3.23, 3.23.49)O mecanismo de armazenamento transacional
InnoDBfoi declarado estável na árvore doMySQL3.23, a partir da versão 3.23.49.InnoDBtem sido usado em sistema de produção grandes e com carga pesada.Tabelas
BDB--- GammaO código do
Berkeley DBé muito estável, mas ainda estamos melhorando a interface do mecanismo de armazenamento transacional doBDBnoServidor MySQL, assim levará algum tempo até que ele esteja tão bem testado quanto os outro tipos de tabela.Pesquisas Full-text --- Beta
Pesquisa full-text funcionam mas ainda não são largamente usadas. Melhoramentos importantes forma implementados no
MySQL4.0.MyODBC 3.51(usa ODBC SDK 3.51) --- EstávelEm grande uso na produção. Alguns problemas apresentados parecem ser relacionados a aplicação e independente do driver ODBC ou do servidor de banco de dados.
Recuperação automática de tabelas
MyISAM--- GammaEste status se aplica apenas ao novo código que confere no mecanismo de armazenamento
MyISAMque verifica, na inicialização, se a tabela foi fechada corretamente e executa uma conferência/reparo automático da tabela em caso negativo.Bulk-insert --- Alpha
Novo recurso nas tabelas
MyISAMnoMySQL4.0 para inserções mais rápidas de vários registros.Locking --- Gamma
Esse módulo é muito dependente do sistema. Em alguns sistemas existem certos problemas por utilizar o locking padrão do SO (
fcntl(). Nestes casos, você deve executar omysqldcom o parâmetro--skip-external-locking. São conhecidos alguns problemas ocorridos em alguns sistemas Linux e no SunOS quando utiliza-se sistemas de arquivos montados em NFS.
Clientes que pagam recebem suporte direto e de alta qualidade da MySQL AB. A MySQL AB também fornece uma lista de discussão como um recurso da comunidade onde qualquer pessoa pode tirar suas dúvidas.
Erros são normalmente corrigidos com um patch; para erros sérios, normalmente é lançada uma nova distribuição.
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 | Limite do tamanho do arquivo |
| Linux-Intel 32 bit | 2G, muito mais usando LFS |
| Linux-Alpha | 8T (?) |
| Solaris 2.5.1 | 2G (É possível 4GB com patch) |
| Solaris 2.6 | 4G (pode ser alterado com parâmetro) |
| Solaris 2.7 Intel | 4G |
| Solaris 2.7 ULTRA-SPARC | 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" em http://www.suse.de/~aj/linux_lfs.html.
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 See Secção 4.6.8, “Sintaxe de SHOW”.
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. See Secção 6.5.3, “Sintaxe CREATE TABLE”. Você pode também
alterar isso mais tarde com ALTER TABLE. See
Secção 6.5.4, “Sintaxe 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
myisampackpara unir e comprimir várias tabelas em uma.mysisampacknormalmente comprime uma tabela em pelo menos 50%, portanto você pode obter, com isso, tabelas muito maiores. See Secção 4.8.4, “myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL”.Outra opção para contornar o limite de tamanho de arquivos do sistema operacional para arquivos de dados
MyISAMusando a opçãoRAID. See Secção 6.5.3, “SintaxeCREATE TABLE”.O
MySQLincluí uma bibliotecaMERGEque permite acessar uma coleção de tabelas idênticas como se fosse apenas uma. See Secção 7.2, “TabelasMERGE”.
O Servidor MySQL não apresenta nenhum
problema com o ano 2000 (Y2K compatível)
O
Servidor MySQLusa funções de tempo Unix que tratam datas até o ano2037para valoresTIMESTAMP; para valoresDATEeDATETIME, datas até o ano 9999 são aceitas.Todas as funções de data do
MySQLestão no arquivosql/time.cce codificadas com muito cuidado para ser compatível com o ano 2000.No
MySQLversão 3.22 e posterior, o novo tipo de campoYEARpode armazenar anos0e1901até2155em 1 byte e mostrá-lo usando 2 ou 4 dígitos. Todos os anos de 2 dígitos são considerados estar na faixa de1970até2069; o que significa que se você armazenar01em uma colunaYEAR, OServidor MySQLo tratará como2001.
O seguinte demonstração simples ilustra que o MySQL
Server não tem nenhum problema com datas até depois
do ano 2030:
mysql>DROP TABLE IF EXISTS y2k;Query OK, 0 rows affected (0.01 sec) mysql>CREATE TABLE y2k (date DATE,->date_time DATETIME,->time_stamp TIMESTAMP);Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO y2k VALUES->("1998-12-31","1998-12-31 23:59:59",19981231235959),->("1999-01-01","1999-01-01 00:00:00",19990101000000),->("1999-09-09","1999-09-09 23:59:59",19990909235959),->("2000-01-01","2000-01-01 00:00:00",20000101000000),->("2000-02-28","2000-02-28 00:00:00",20000228000000),->("2000-02-29","2000-02-29 00:00:00",20000229000000),->("2000-03-01","2000-03-01 00:00:00",20000301000000),->("2000-12-31","2000-12-31 23:59:59",20001231235959),->("2001-01-01","2001-01-01 00:00:00",20010101000000),->("2004-12-31","2004-12-31 23:59:59",20041231235959),->("2005-01-01","2005-01-01 00:00:00",20050101000000),->("2030-01-01","2030-01-01 00:00:00",20300101000000),->("2050-01-01","2050-01-01 00:00:00",20500101000000);Query OK, 13 rows affected (0.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql>SELECT * FROM y2k;+------------+---------------------+----------------+ | date | date_time | time_stamp | +------------+---------------------+----------------+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 | +------------+---------------------+----------------+ 13 rows in set (0.00 sec)
O valor da coluna TIMESTAMP final é zero
porque o ano final (2050) excede o
TIMESTAMP maximo. O tipo de dados
TIMESTAMP, que é usado para armazenar a hora
atual, suporta valores na faixa de
19700101000000 a
20300101000000 em máquinas 32 bits (valor
com sinal). Em máquinas de 64 bits,
TIMESTAMP trata valores até
2106 (valores sem sinal).
O exemplo mostra que os tipos DATE e
DATETIME não tem problemas com as datas
usadas. Eles irão conseguir trabalhar com datas até o ano
9999.
Embora o MySQL Server seja seguro em
relação ao ano 2000, você pode ter problemas se você usá-lo
com aplicações que não são seguras com o ano 2000. Por
exemplo, muitas aplicações antigas armazenam ou manipulam anos
usando valores de 2 digitos (que são ambíguos) em vez de 4
dígitos. Este problema pode ser aumentado por aplicações que
usam valores como 00 ou 99
como indicadores de valores ``perdidos''. Infelizmente, estes
problemas pode ser difíceis de corrigir, cada um deles pode
usar um conjunto diferente de convenções e funções de
tratamento de datas.
Assim, apesar do Servidor MySQL não ter
problemas com o ano 2000, é de responsabilidade de sua
aplicação fornecer datas que não sejam ambíguas. Veja
Secção 6.2.2.1, “Assuntos referentes ao ano 2000 (Y2K) e Tipos de Data” para as regras do Servidor
MySQL para lidar com entrada de datas ambíguas que
contenham valores de ano com 2 dígitos.

