117390231 Apostila MySQL a Biblia

1147
MySQL Reference Manual Copyright c 1997-2003 MySQL AB

Transcript of 117390231 Apostila MySQL a Biblia

  • MySQL Reference Manual

    Copyright c 1997-2003 MySQL AB

  • iSumario

    1 Informacoes Gerais . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Sobre Este Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    1.1.1 Convencoes Usadas Neste Manual . . . . . . . . . . . . . . . . 21.2 Visao Geral do Sistema de Gerenciamento de Banco de Dados

    MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.1 Historia do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2.2 As Principais Caracteristicas do MySQL . . . . . . . . . . 51.2.3 Estabilidade do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.4 Qual o Tamanho Que as Tabelas do MySQL Podem

    Ter? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2.5 Compatibilidade Com o Ano 2000 (Y2K) . . . . . . . . 11

    1.3 Visao Geral da MySQL AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.3.1 O Modelo de Negocio e Servicos da MySQL AB . . 13

    1.3.1.1 Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.3.1.2 Treinamento e Certificacao . . . . . . . . . . . . . 131.3.1.3 Consultoria . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.3.1.4 Licencas Comerciais . . . . . . . . . . . . . . . . . . . 141.3.1.5 Parcerias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    1.3.2 Informacoes para Contato . . . . . . . . . . . . . . . . . . . . . . 151.4 Suporte e Licenciamento do MySQL . . . . . . . . . . . . . . . . . . . . . 16

    1.4.1 Suporte Oferecido pela MySQL AB . . . . . . . . . . . . . 161.4.2 Copyrights e Licencas Usadas pelo MySQL . . . . . . 171.4.3 Licencas do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    1.4.3.1 Usando o Programa MySQL Sob umaLicenca Comercial . . . . . . . . . . . . . . . . . . . . . . . . 18

    1.4.3.2 Usando o Programa MySQL Sem CustoSob GPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    1.4.4 Logomarcas e Marcas Registradas da MySQL AB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.4.4.1 O Logo Original do MySQL . . . . . . . . . . . . 201.4.4.2 Logomarcas da MySQL que Podem Ser

    Usadas Sem Permissao de Alteracao . . . . . . . . 201.4.4.3 Quando Voce Precisa de Permissao de

    Alteracao para Usar as Logomarcas do MySQL?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    1.4.4.4 Logomarcas dos Parceiros da MySQL AB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    1.4.4.5 Usando a Palavra MySQL em Texto Impressoou Apresentacao . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    1.4.4.6 Usando a Palavra MySQL em Nomes deCompanhias e Produtos . . . . . . . . . . . . . . . . . . . 21

    1.5 Mapa de Desenvolvimento do MySQL. . . . . . . . . . . . . . . . . . . . 211.5.1 MySQL 4.0 in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . 22

  • ii

    1.5.1.1 Recursos Disponiveis no MySQL 4.0 . . . . 221.5.1.2 Servidor Embutido MySQL . . . . . . . . . . . . 23

    1.5.2 MySQL 4.1 in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . 241.5.2.1 Recursos Disponiveis no MySQL 4.1 . . . . 241.5.2.2 Stepwise Rollout . . . . . . . . . . . . . . . . . . . . . . 261.5.2.3 Pronto para Uso em Desenvolvimento

    Imediato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.5.3 MySQL 5.0, A Proxima Distribuicao de

    Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.6 MySQL e o Futuro (o TODO). . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    1.6.1 Novos Recursos Planejados Para a Versao 4.1 . . . . 261.6.2 Novos Recursos Planejados Para a Versao 5.0 . . . . 271.6.3 Novos Recursos Planejados Para a Versao 5.1 . . . . 281.6.4 Novos Recursos Planejados Para a Versao em um

    Futuro Proximo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281.6.5 Novos Recursos Planejados Para a Versao em um

    Futuro a Medio Prazo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311.6.6 Novos Recursos que Nao Planejamos Fazer . . . . . . 32

    1.7 Fontes de Informacoes do MySQL . . . . . . . . . . . . . . . . . . . . . . . 331.7.1 Listas de Discussao MySQL . . . . . . . . . . . . . . . . . . . . 33

    1.7.1.1 As Listas de Discussao do MySQL . . . . . . 331.7.1.2 Fazendo perguntas ou relatando erros . . . 351.7.1.3 Como relatar erros ou problemas . . . . . . . 361.7.1.4 Guia para responder questoes na lista de

    discussao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.7.2 Suporte a Comunidade MySQL Atrves do IRC

    (Internet Relay Chat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.8 Qual compatibilidade aos padroes o MySQL oferece ? . . . . . 41

    1.8.1 Qual Padrao o MySQL Segue? . . . . . . . . . . . . . . . . . . 421.8.2 Executando o MySQL no modo ANSI . . . . . . . . . . . 421.8.3 Extensoes do MySQL para o Padrao SQL-92 . . . . . 431.8.4 Diferencas do MySQL em Comparacao com o

    SQL-92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451.8.4.1 Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . 461.8.4.2 SELECT INTO TABLE . . . . . . . . . . . . . . . . . . . 461.8.4.3 Transacoes e Operacoes Atomicas . . . . . . 461.8.4.4 Stored Procedures e Triggers . . . . . . . . . . . 491.8.4.5 Chaves Estrangeiras . . . . . . . . . . . . . . . . . . . 491.8.4.6 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511.8.4.7 -- como Inicio de Comentario . . . . . . . . 51

    1.8.5 Como o MySQL Lida com Restricoes . . . . . . . . . . . . 521.8.5.1 Restricoes de PRIMARY KEY / UNIQUE

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521.8.5.2 Restricoes de NOT NULL . . . . . . . . . . . . . . . . 531.8.5.3 Restricoes de ENUM e SET. . . . . . . . . . . . . . . 53

    1.8.6 Erros Conhecidos e Deficiencias de Projetos noMySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

  • iii

    1.8.6.1 Erros da Versao 3.23 Corrigidos em VersoesPosteriores do MySQL . . . . . . . . . . . . . . . . . . . . 53

    1.8.6.2 Open Bugs / Deficiencias de Projeto noMySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    2 Instalacao do MySQL . . . . . . . . . . . . . . . . . . . . . 602.1 Instalacao rapida padrao do MySQL . . . . . . . . . . . . . . . . . . . . . 60

    2.1.1 Instalando o MySQL no Windows . . . . . . . . . . . . . . . 602.1.1.1 Exigencias do Sistema Windows . . . . . . . . 612.1.1.2 Instalando uma Distribuicao Binaria do

    Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.1.1.3 Preparando o Ambiente MySQL do

    Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.1.1.4 Selecionando um Servidor Windows . . . . 632.1.1.5 Iniciando o Servidor pela Primeira Vez . . 642.1.1.6 Iniciando o MySQL no Windows 95, 98, ou

    Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.1.1.7 Iniciando o MySQL no Windows NT, 2000,

    ou XP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.1.1.8 Executando o MySQL no Windows . . . . . 68

    2.1.2 Instalando o MySQL no Linux . . . . . . . . . . . . . . . . . . 692.1.3 Instalando o MySQL no Mac OS X . . . . . . . . . . . . . 712.1.4 Instalando o MySQL no NetWare . . . . . . . . . . . . . . . 73

    2.1.4.1 Instalando o MySQL para Binarios doNetWare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

    2.2 Detalhes Gerais de Instalacao . . . . . . . . . . . . . . . . . . . . . . . . . . . 752.2.1 Como obter o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 752.2.2 Verificando a Integridade do Pacote Usando MD5

    Checksums ou GnuPG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752.2.3 Sistemas Operacionais suportados pelo MySQL . . 782.2.4 Qual versao do MySQL deve ser usada . . . . . . . . . . 802.2.5 Layouts de Instalacao . . . . . . . . . . . . . . . . . . . . . . . . . . 832.2.6 Como e quando as atualizacoes sao lancadas? . . . . 842.2.7 Filosofia das Distribuicoes - Nenhum Bug

    Conhecidos nas Distribuicoes . . . . . . . . . . . . . . . . . . . . . 842.2.8 Binarios MySQL compilados pela MySQL AB . . . 862.2.9 Instalando uma Distribuicao Binaria do MySQL . . 91

    2.3 Instalando uma distribuicao com fontes do MySQL . . . . . . . 932.3.1 Visao geral da instalacao rapida . . . . . . . . . . . . . . . . 942.3.2 Aplicando patches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972.3.3 Opcoes tipicas do configure . . . . . . . . . . . . . . . . . . . 972.3.4 Instalando pela arvore de fontes do desenvolvimento

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002.3.5 Lidando com Problemas de Compilacao . . . . . . . . 1032.3.6 Notas MIT-pthreads . . . . . . . . . . . . . . . . . . . . . . . . . . 1062.3.7 Instalando o MySQL a partir do Fonte no Windows

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072.3.7.1 Construindo o MySQL Usando VC++ . . 108

  • iv

    2.3.7.2 Criando um Pacote Fonte do Windows apartir da Ultima Fonte de Desenvolvimento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    2.4 Configuracoes e Testes Pos-instalacao . . . . . . . . . . . . . . . . . . . 1112.4.1 Problemas Executando o mysql_install_db. . . . 1152.4.2 Problemas Inicializando o Servidor MySQL . . . . . 1162.4.3 Inicializando e parando o MySQL automaticamente.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.5 Atualizando/Desatualizando o MySQL . . . . . . . . . . . . . . . . . . 120

    2.5.1 Atualizando da Versao 4.0 para 4.1 . . . . . . . . . . . . 1202.5.2 Atualizando da Versao 3.23 para 4.0 . . . . . . . . . . . 1232.5.3 Atualizando da versao 3.22 para 3.23 . . . . . . . . . . . 1262.5.4 Atualizando da versao 3.21 para 3.22 . . . . . . . . . . . 1282.5.5 Atualizando da versao 3.20 para 3.21 . . . . . . . . . . . 1292.5.6 Atualizando a Tabela de Permissoes . . . . . . . . . . . . 1302.5.7 Atualizando para outra arquitetura . . . . . . . . . . . . 1302.5.8 Atualizando o MySQL no Windows . . . . . . . . . . . . 132

    2.6 Notas especificas para os Sistemas Operacionais . . . . . . . . . 1322.6.1 Notas Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    2.6.1.1 Conectando em um MySQL Rematamentea Windows Utilizando SSH . . . . . . . . . . . . . . . 133

    2.6.1.2 Distribuindo Dados Entre Diferentes Discosno Win32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    2.6.1.3 Compilando clientes MySQL no Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    2.6.1.4 MySQL para Windows Comparado com oMySQL para Unix . . . . . . . . . . . . . . . . . . . . . . . 134

    2.6.2 Notas Linux (Todas as versoes) . . . . . . . . . . . . . . . . 1372.6.2.1 Notas Linux para distribuicoes binarias

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412.6.2.2 Notas Linux x86 . . . . . . . . . . . . . . . . . . . . . 1422.6.2.3 Notas Linux SPARC . . . . . . . . . . . . . . . . . 1432.6.2.4 Notas Linux Alpha . . . . . . . . . . . . . . . . . . . 1432.6.2.5 Notas Linux PowerPC . . . . . . . . . . . . . . . . 1442.6.2.6 Notas Linux MIPS . . . . . . . . . . . . . . . . . . . 1442.6.2.7 Notas Linux IA-64 . . . . . . . . . . . . . . . . . . . 144

    2.6.3 Notas Solaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442.6.3.1 Notas Solaris 2.7/2.8 . . . . . . . . . . . . . . . . . 1472.6.3.2 Notas Solaris x86 . . . . . . . . . . . . . . . . . . . . 148

    2.6.4 Notas BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492.6.4.1 Notas FreeBSD . . . . . . . . . . . . . . . . . . . . . . 1492.6.4.2 Notas NetBSD . . . . . . . . . . . . . . . . . . . . . . . 1502.6.4.3 Notas OpenBSD . . . . . . . . . . . . . . . . . . . . . 1502.6.4.4 Notas OpenBSD 2.8 . . . . . . . . . . . . . . . . . . 1512.6.4.5 Notas BSDI Versao 2.x . . . . . . . . . . . . . . . 1512.6.4.6 Notas BSD/OS Versao 3.x . . . . . . . . . . . . 1512.6.4.7 Notas BSD/OS Versao 4.x . . . . . . . . . . . . 152

    2.6.5 Notas Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

  • v2.6.5.1 Mac OS X 10.x . . . . . . . . . . . . . . . . . . . . . . 1522.6.5.2 Mac OS X Server 1.2 (Rhapsody) . . . . . 153

    2.6.6 Notas de Outros Unix . . . . . . . . . . . . . . . . . . . . . . . . . 1532.6.6.1 Notas HP-UX para distribuicoes binarias

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1532.6.6.2 Notas HP-UX Versao 10.20 . . . . . . . . . . . 1542.6.6.3 Notas HP-UX Versao 11.x . . . . . . . . . . . . 1542.6.6.4 Notas IBM-AIX. . . . . . . . . . . . . . . . . . . . . . 1552.6.6.5 Notas SunOS 4 . . . . . . . . . . . . . . . . . . . . . . 1572.6.6.6 Notas Alpha-DEC-UNIX (Tru64) . . . . . 1572.6.6.7 Notas Alpha-DEC-OSF1. . . . . . . . . . . . . . 1592.6.6.8 Notas SGI Irix . . . . . . . . . . . . . . . . . . . . . . . 1602.6.6.9 Notas SCO . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.6.6.10 Notas SCO Unixware Version 7.0 . . . . . 163

    2.6.7 Notas OS/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632.6.8 Notas Novell NetWare . . . . . . . . . . . . . . . . . . . . . . . . 1642.6.9 Notas BeOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

    2.7 Comentarios de Instalacao do Perl . . . . . . . . . . . . . . . . . . . . . . 1652.7.1 Instalando Perl no Unix . . . . . . . . . . . . . . . . . . . . . . . 1652.7.2 Instalaando ActiveState Perl no Windows . . . . . . 1662.7.3 Problemas Usando a Interface Perl DBI/DBD . . . . 166

    3 Tutorial de Introducao Do MySQL . . . . . . . 1693.1 Conectando e Desconectando do Servidor . . . . . . . . . . . . . . . 1693.2 Fazendo Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703.3 Criacao e Utilizacao de um Banco de Dados . . . . . . . . . . . . . 173

    3.3.1 Criando e Selecionando um Banco de Dados . . . . 1743.3.2 Criando uma Tabela . . . . . . . . . . . . . . . . . . . . . . . . . . 1753.3.3 Carregando dados em uma tabela . . . . . . . . . . . . . . 1763.3.4 Recuperando Informacoes de uma Tabela . . . . . . . 178

    3.3.4.1 Selecionando Todos os Dados . . . . . . . . . 1783.3.4.2 Selecionando Registros Especificos . . . . . 1793.3.4.3 Selecionando Colunas Especificas . . . . . . 1803.3.4.4 Ordenando Registros . . . . . . . . . . . . . . . . . 1813.3.4.5 Calculo de Datas . . . . . . . . . . . . . . . . . . . . . 1833.3.4.6 Trabalhando com Valores Nulos (NULL)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1863.3.4.7 Combinacao de padroes. . . . . . . . . . . . . . . 1863.3.4.8 Contando Registros . . . . . . . . . . . . . . . . . . 1893.3.4.9 Utilizando Multiplas Tabelas . . . . . . . . . . 191

    3.4 Obtendo Informacoes Sobre Bancos de Dados e Tabelas . . 1933.5 Utilizando mysql em Modo Batch . . . . . . . . . . . . . . . . . . . . . . 1943.6 Exemplos de Consultas Comuns . . . . . . . . . . . . . . . . . . . . . . . . 196

    3.6.1 O Valor Maximo para uma Coluna . . . . . . . . . . . . . 1963.6.2 O Registro que Armazena o Valor Maximo para uma

    Coluna Determinada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1973.6.3 Maximo da Coluna por Grupo . . . . . . . . . . . . . . . . . 197

  • vi

    3.6.4 As Linhas Armazenando o Group-wise Maximo deum Certo Campo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    3.6.5 Utilizando Variaveis de Usuario . . . . . . . . . . . . . . . . 1993.6.6 Utilizando Chaves Estrangeiras . . . . . . . . . . . . . . . . 1993.6.7 Pesquisando em Duas Chaves . . . . . . . . . . . . . . . . . . 2013.6.8 Calculando Visitas Diarias . . . . . . . . . . . . . . . . . . . . 2013.6.9 Usando AUTO_INCREMENT . . . . . . . . . . . . . . . . . . . . . . 202

    3.7 Consultas de Projetos Gemeos . . . . . . . . . . . . . . . . . . . . . . . . . 2033.7.1 Encontrando Todos Gemeos Nao-distribuidos . . . 2043.7.2 Mostrando uma Tabela sobre a Situacao dos Pares

    Gemeos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2063.8 Utilizando MySQL com Apache . . . . . . . . . . . . . . . . . . . . . . . . 207

    4 Administracao do Bancos de Dados MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2084.1 Configurando o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    4.1.1 Opcoes de Linha de Comando do mysqld . . . . . . . 2084.1.2 Arquivo de Opcoes my.cnf . . . . . . . . . . . . . . . . . . . 217

    4.2 Executando Multiplos MySQL Servers na Mesma Maquina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2204.2.1 Executando Multiplos Servidores no Windows . . 221

    4.2.1.1 Iniciando Multiplos Servidores na Linha deComando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

    4.2.1.2 Iniciando Multiplos Servidores ComoServicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    4.2.2 Executando Multiplos Servidores no Unix . . . . . . 2254.2.3 Usando Programas Clientes em um Ambiente

    Multi-Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2264.3 Detalhes Gerais de Seguranca e o Sistema de Privilegio de

    Acesso do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2274.3.1 Seguranca Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2274.3.2 Como Tornar o MySQL Seguro contra Crackers

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2304.3.3 Opcoes de Inicializacao para o mysqld em Relacao a

    Seguranca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2314.3.4 Detalhes de Seguranca com LOAD DATA LOCAL . . . 2324.3.5 O Que o Sistema de Privilegios Faz . . . . . . . . . . . . 2334.3.6 Como o Sistema de Privilegios Funciona . . . . . . . . 2334.3.7 Privilegios Fornecidos pelo MySQL . . . . . . . . . . . . 2374.3.8 Conectando ao Servidor MySQL . . . . . . . . . . . . . . . 2394.3.9 Controle de Acesso, Estagio 1: Verificacao da

    Conexao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2404.3.10 Controle de Acesso, Estagio 2: Verificacao da

    Requisicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2434.3.11 Hashing de Senhas no MySQL 4.1 . . . . . . . . . . . . 2464.3.12 Causas dos Erros de Accesso Negado . . . . . . . . . 250

    4.4 Gerenciamento das Contas dos Usuarios no MySQL . . . . . . 2554.4.1 A Sintaxe de GRANT e REVOKE . . . . . . . . . . . . . . . . . . 255

  • vii

    4.4.2 Nomes de Usuarios e Senhas do MySQL . . . . . . . . 2604.4.3 Quando as Alteracoes nos Privilegios tem Efeito

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2614.4.4 Configurando os Privilegios Iniciais do MySQL . . 2614.4.5 Adicionando Novos Usuarios ao MySQL . . . . . . . . 2624.4.6 Deletando Usuarios do MySQL . . . . . . . . . . . . . . . . 2654.4.7 Limitando os Recursos dos Usuarios . . . . . . . . . . . . 2664.4.8 Configurando Senhas . . . . . . . . . . . . . . . . . . . . . . . . . 2674.4.9 Mantendo Sua Senha Segura . . . . . . . . . . . . . . . . . . 2684.4.10 Usando Conexoes Seguras . . . . . . . . . . . . . . . . . . . . 269

    4.4.10.1 Conceitos Basicos . . . . . . . . . . . . . . . . . . . 2694.4.10.2 Exigencias . . . . . . . . . . . . . . . . . . . . . . . . . . 2694.4.10.3 Configurando Certificados SSL para o

    MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2704.4.10.4 Opcoes SSL do GRANT . . . . . . . . . . . . . . . 2744.4.10.5 Opcoes SSL de Linha de Comando . . . 275

    4.5 Prevencao de Disastres e Recuperacao . . . . . . . . . . . . . . . . . . 2764.5.1 Backups dos Bancos de Dados . . . . . . . . . . . . . . . . . 2764.5.2 Sintaxe de BACKUP TABLE . . . . . . . . . . . . . . . . . . . . . . 2784.5.3 Sintaxe de RESTORE TABLE . . . . . . . . . . . . . . . . . . . . . 2784.5.4 Sintaxe de CHECK TABLE . . . . . . . . . . . . . . . . . . . . . . . 2794.5.5 Sintaxe do REPAIR TABLE . . . . . . . . . . . . . . . . . . . . . . 2804.5.6 Utilizando myisamchk para Manutencao de Tabelas e

    Recuperacao em Caso de Falhas. . . . . . . . . . . . . . . . . . 2814.5.6.1 Sintaxe do myisamchk . . . . . . . . . . . . . . . . 2824.5.6.2 Opcoes Gerais do myisamchk . . . . . . . . . . 2834.5.6.3 Opcoes de Verificacao do myisamchk . . . 2844.5.6.4 Opcoes de Reparos do myisamchk . . . . . 2854.5.6.5 Outras Opcoes do myisamchk . . . . . . . . . 2874.5.6.6 Uso de Memoria do myisamchk . . . . . . . . 2874.5.6.7 Uso do myisamchk para Recuperacao em

    Caso de Falhas . . . . . . . . . . . . . . . . . . . . . . . . . . 2884.5.6.8 Como Verificar Erros em Tabelas . . . . . . 2894.5.6.9 Como Reparar Tabelas . . . . . . . . . . . . . . . 2904.5.6.10 Otimizacao de Tabelas . . . . . . . . . . . . . . 292

    4.5.7 Configurando um Regime de Manutencao dasTabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

    4.5.8 Obtendo Informacoes sobre as Tabelas . . . . . . . . . 2934.6 Adiministracao do Banco de Dados e Referencia de Linguagem

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2994.6.1 Sintaxe de OPTIMIZE TABLE . . . . . . . . . . . . . . . . . . . . 2994.6.2 Sintaxe de ANALYZE TABLE . . . . . . . . . . . . . . . . . . . . . 2994.6.3 Sintaxe de CHECKSUM TABLE . . . . . . . . . . . . . . . . . . . . 3004.6.4 Sintaxe de FLUSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3004.6.5 Sintaxe de RESET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3024.6.6 Sintaxe de PURGE MASTER LOGS . . . . . . . . . . . . . . . . . 3024.6.7 Sintaxe de KILL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3024.6.8 Sintaxe de SHOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

  • viii

    4.6.8.1 Recuperando Informacoes sobre Bancos deDados, Tabelas, Colunas e Indices . . . . . . . . . 304

    4.6.8.2 SHOW TABLE STATUS . . . . . . . . . . . . . . . . . . 3054.6.8.3 SHOW STATUS . . . . . . . . . . . . . . . . . . . . . . . . . 3064.6.8.4 SHOW VARIABLES . . . . . . . . . . . . . . . . . . . . . 3094.6.8.5 SHOW [BDB] LOGS . . . . . . . . . . . . . . . . . . . . . 3214.6.8.6 SHOW PROCESSLIST . . . . . . . . . . . . . . . . . . . 3214.6.8.7 SHOW GRANTS . . . . . . . . . . . . . . . . . . . . . . . . . 3234.6.8.8 SHOW CREATE TABLE . . . . . . . . . . . . . . . . . . 3234.6.8.9 SHOW WARNINGS | ERRORS . . . . . . . . . . . . . 3234.6.8.10 SHOW TABLE TYPES . . . . . . . . . . . . . . . . . . 3254.6.8.11 SHOW PRIVILEGES . . . . . . . . . . . . . . . . . . . 326

    4.7 Localizacao do MySQL e Utilizacao Internacional . . . . . . . . 3264.7.1 O Conjunto de Caracteres Utilizado para Dados e

    Ordenacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3264.7.1.1 German character set . . . . . . . . . . . . . . . . 327

    4.7.2 Mensagens de Erros em Outras Linguas . . . . . . . . 3284.7.3 Adicionando um Novo Conjunto de Caracteres . . 3284.7.4 Os Vetores de Definicoes de Caracteres . . . . . . . . . 3304.7.5 Suporte a` Ordenacao de Strings . . . . . . . . . . . . . . . 3304.7.6 Suporte a` Caracteres Multi-byte . . . . . . . . . . . . . . . 3314.7.7 Problemas com Conjuntos de Caracteres . . . . . . . 331

    4.8 Utilitarios e Scripts do Lado do Servidor MySQL . . . . . . . . 3314.8.1 Visao Geral dos Scripts e Utilitarios do Lado

    Servidor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3314.8.2 mysqld-safe, o wrapper do mysqld . . . . . . . . . . . . 3324.8.3 mysqld_multi, programa para gerenciar multiplos

    servidores MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3344.8.4 myisampack, O Gerador de Tabelas Compactadas de

    Somente Leitura do MySQL . . . . . . . . . . . . . . . . . . . . . 3374.8.5 mysqld-max, om servidor mysqld extendido . . . . . 344

    4.9 Utilitarios e Scripts do Lado do Cliente MySQL . . . . . . . . . 3464.9.1 Visao Geral dos Utilitarios e Scripts do Lado do

    Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3464.9.2 mysql, A Ferramenta de Linha de Comando . . . . 3474.9.3 mysqlcc, The MySQL Control Center . . . . . . . . . . 3554.9.4 mysqladmin, Administrando um Servidor MySQL

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3574.9.5 mysqlbinlog, Executando as Consultas a Partir de

    um Log Binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3584.9.6 Usando mysqlcheck para Manutencao de Tabelas e

    Recuperacao em Caso de Falhas. . . . . . . . . . . . . . . . . . 3604.9.7 mysqldump, Descarregando a Estrutura de Tabelas e

    Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3624.9.8 mysqlhotcopy, Copiando Bancos de Dados e Tabelas

    do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3664.9.9 mysqlimport, Importando Dados de Arquivos Texto

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

  • ix

    4.9.10 mysqlshow, Exibindo Bancos de Dados, Tabelas eColunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

    4.9.11 mysql_config, Opcoes para compilacao do clienteMySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

    4.9.12 perror, Explicando Codigos de Erros . . . . . . . . . 3724.9.13 Como Executar Comandos SQL a Partir de um

    Arquivo Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3724.10 Os Arquivos de Log do MySQL . . . . . . . . . . . . . . . . . . . . . . . 372

    4.10.1 O Log de Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3734.10.2 O Log de Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . 3734.10.3 O Log de Atualizacoes . . . . . . . . . . . . . . . . . . . . . . . 3744.10.4 O Log Binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3754.10.5 O Log para Consultas Lentas . . . . . . . . . . . . . . . . . 3784.10.6 Manutencao do Log de Arquivo . . . . . . . . . . . . . . . 378

    4.11 Replicacao no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3794.11.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3794.11.2 Visao Geral da Implementacao da Replicacao . . 3804.11.3 Detalhes de Implementacao da Replicacao . . . . . 3814.11.4 Como Configurar a Replicacao . . . . . . . . . . . . . . . . 3864.11.5 Recursos de Replicacao e Problemas Conhecidos

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3904.11.6 Opcoes de Inicializacao da Replicacao . . . . . . . . . 3924.11.7 Instrucoes SQL para Controle do Servidor Master

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4004.11.7.1 PURGE MASTER LOGS . . . . . . . . . . . . . . . . . 4014.11.7.2 RESET MASTER . . . . . . . . . . . . . . . . . . . . . . 4014.11.7.3 SET SQL_LOG_BIN . . . . . . . . . . . . . . . . . . . 4014.11.7.4 SHOW BINLOG EVENTS . . . . . . . . . . . . . . . . 4014.11.7.5 SHOW MASTER STATUS . . . . . . . . . . . . . . . . 4024.11.7.6 SHOW MASTER LOGS . . . . . . . . . . . . . . . . . . 4024.11.7.7 SHOW SLAVE HOSTS . . . . . . . . . . . . . . . . . . 402

    4.11.8 Instrucoes SQL para Controle do Servidor Slave. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4024.11.8.1 CHANGE MASTER TO . . . . . . . . . . . . . . . . . . 4024.11.8.2 LOAD DATA FROM MASTER . . . . . . . . . . . . . 4054.11.8.3 LOAD TABLE tbl_name FROM MASTER . . . 4054.11.8.4 MASTER_POS_WAIT() . . . . . . . . . . . . . . . . 4054.11.8.5 RESET SLAVE . . . . . . . . . . . . . . . . . . . . . . . . 4064.11.8.6 SET GLOBAL SQL_SLAVE_SKIP_COUNTER

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4064.11.8.7 SHOW SLAVE STATUS . . . . . . . . . . . . . . . . . 4064.11.8.8 START SLAVE . . . . . . . . . . . . . . . . . . . . . . . . 4094.11.8.9 STOP SLAVE . . . . . . . . . . . . . . . . . . . . . . . . . 410

    4.11.9 FAQ da Replicacao . . . . . . . . . . . . . . . . . . . . . . . . . . 4114.11.10 Problemas com Replicacao . . . . . . . . . . . . . . . . . . 4164.11.11 Relatando Problemas de Replicacao . . . . . . . . . . 417

  • x5 Otimizacao do MySQL . . . . . . . . . . . . . . . . . . . 4195.1 Visao Geral da Otimizacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

    5.1.1 Limitacoes do Projeto MySQL/Trocas . . . . . . . . . 4195.1.2 Portabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4205.1.3 Para que Utilizamos o MySQL? . . . . . . . . . . . . . . . . 4215.1.4 O Pacote de Benchmark do MySQL . . . . . . . . . . . . 4225.1.5 Utilizando seus Proprios Benchmarks . . . . . . . . . . 423

    5.2 Otimizando SELECTs e Outras Consultas . . . . . . . . . . . . . . . . 4245.2.1 Sintaxe de EXPLAIN (Obter informacoes sobre uma

    SELECT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4255.2.2 Estimando o Desempenho de uma Consulta. . . . . 4325.2.3 Velocidade das Consultas que Utilizam SELECT . . 4325.2.4 Como o MySQL Otimiza Clausulas WHERE . . . . . . 4335.2.5 Como o MySQL Otimiza IS NULL . . . . . . . . . . . . . . 4345.2.6 Como o MySQL Otimiza Clausulas DISTINCT . . . 4355.2.7 Como o MySQL Otimiza LEFT JOIN e RIGHT JOIN

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4365.2.8 Como o MySQL Otimiza Clausulas ORDER BY . . . 4375.2.9 Como o MySQL Otimiza Clausulas LIMIT . . . . . . 4385.2.10 Performance das Consultas que Utilizam INSERT

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4395.2.11 Performance das Consultas que Utilizam UPDATE

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4415.2.12 Performance das Consultas que Utilizam DELETE

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4415.2.13 Mais Dicas sobre Otimizacoes . . . . . . . . . . . . . . . . 441

    5.3 Detalhes sobre Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4445.3.1 Como o MySQL Trava as Tabelas . . . . . . . . . . . . . . 4445.3.2 Detalhes sobre Lock de Tabelas . . . . . . . . . . . . . . . . 445

    5.4 Otimizando a Estrutura de Banco de Dados . . . . . . . . . . . . . 4475.4.1 Opcoes do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4475.4.2 Deixando os Dados com o Menor Tamanho Possivel

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4475.4.3 Como o MySQL Utiliza Indices . . . . . . . . . . . . . . . . 4485.4.4 Indices de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4505.4.5 Indices de Multiplas Colunas . . . . . . . . . . . . . . . . . . 4515.4.6 Como o MySQL Conta as Tabelas Abertas . . . . . 4525.4.7 Como o MySQL Abre e Fecha as Tabelas . . . . . . . 4525.4.8 Desvantagem em Criar um Numero Grande de

    Tabelas no Mesmo Banco de Dados . . . . . . . . . . . . . . 4535.5 Otimizando o Servidor MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 454

    5.5.1 Sintonia dos Parametros em Tempo deSistema/Compilacao e na Inicializacao . . . . . . . . . . . . 454

    5.5.2 Parametros de Sintonia do Servidor . . . . . . . . . . . . 4545.5.3 Como a Compilacao e a Ligacao Afetam a

    Velocidade do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 4575.5.4 Como o MySQL Utiliza a Memoria . . . . . . . . . . . . 4585.5.5 Como o MySQL Utiliza o DNS . . . . . . . . . . . . . . . . 460

  • xi

    5.5.6 Sintaxe de SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4605.6 Detalhes de Disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

    5.6.1 Utilizando Links Simbolicos . . . . . . . . . . . . . . . . . . . 4665.6.1.1 Utilizando Links Simbolicos para Bancos de

    Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4665.6.1.2 Utilizando Links Simbolicos para Tabelas

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

    6 Referencia de Linguagem do MySQL . . . . . . 4696.1 Estrutura da Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

    6.1.1 Literais: Como Gravar Strings e Numerais . . . . . . 4696.1.1.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4696.1.1.2 Numeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4716.1.1.3 Valores Hexadecimais . . . . . . . . . . . . . . . . 4716.1.1.4 Valores NULL . . . . . . . . . . . . . . . . . . . . . . . . . 471

    6.1.2 Nomes de Banco de dados, Tabela, Indice, Coluna eAlias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

    6.1.3 Caso Sensitivo nos Nomes . . . . . . . . . . . . . . . . . . . . . 4736.1.4 Variaveis de Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . 4746.1.5 Variaveis de Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 4756.1.6 Sintaxe de Comentarios . . . . . . . . . . . . . . . . . . . . . . . 4786.1.7 Tratamento de Palavras Reservadas no MySQL

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4796.2 Tipos de Campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481

    6.2.1 Tipos Numericos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4876.2.2 Tipos de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . 489

    6.2.2.1 Assuntos referentes ao ano 2000 (Y2K) eTipos de Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

    6.2.2.2 Os Tipos DATETIME, DATE e TIMESTAMP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491

    6.2.2.3 O Tipo TIME. . . . . . . . . . . . . . . . . . . . . . . . . 4956.2.2.4 O Tipo YEAR. . . . . . . . . . . . . . . . . . . . . . . . . 496

    6.2.3 Tipos String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4966.2.3.1 Os Tipos CHAR e VARCHAR . . . . . . . . . . . . . 4976.2.3.2 Os Tipos BLOB e TEXT . . . . . . . . . . . . . . . . 4976.2.3.3 O Tipo ENUM. . . . . . . . . . . . . . . . . . . . . . . . . 4996.2.3.4 O Tipo SET . . . . . . . . . . . . . . . . . . . . . . . . . . 500

    6.2.4 Escolhendo o Tipo Correto para uma Coluna . . . 5016.2.5 Usando Tipos de Colunas de Outros Mecanismos de

    Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5016.2.6 Exigencias de Armazenamento dos Tipos de Coluna

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5026.3 Funcoes para Uso em Clausulas SELECT e WHERE . . . . . . . . . 503

    6.3.1 Operadores e Funcoes de Tipos nao Especificados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5046.3.1.1 Parenteses . . . . . . . . . . . . . . . . . . . . . . . . . . . 5046.3.1.2 Operadores de Comparacao . . . . . . . . . . . 5046.3.1.3 Operadores Logicos . . . . . . . . . . . . . . . . . . 508

  • xii

    6.3.1.4 Funcoes de Fluxo de Controle . . . . . . . . . 5106.3.2 Funcoes String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511

    6.3.2.1 Funcoes de Comparacao de Strings . . . . 5196.3.2.2 Caso Sensitivo . . . . . . . . . . . . . . . . . . . . . . . 522

    6.3.3 Funcoes Numericas . . . . . . . . . . . . . . . . . . . . . . . . . . . 5226.3.3.1 Operacoes Aritimeticas . . . . . . . . . . . . . . . 5226.3.3.2 Funcoes Matematicas . . . . . . . . . . . . . . . . . 523

    6.3.4 Funcoes de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . 5296.3.5 Funcoes de Conversao . . . . . . . . . . . . . . . . . . . . . . . . . 5436.3.6 Outras Funcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545

    6.3.6.1 Funcoes Binarias . . . . . . . . . . . . . . . . . . . . . 5456.3.6.2 Funcoes Diversas . . . . . . . . . . . . . . . . . . . . . 546

    6.3.7 Funcoes e Modificadores para Usar com ClausulasGROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555

    6.3.7.1 Funcoes GROUP BY . . . . . . . . . . . . . . . . . . . . 5556.3.7.2 Modificadores GROUP BY . . . . . . . . . . . . . . 5586.3.7.3 GROUP BY com Campos Escondidos . . . . 561

    6.4 Manipulacao de Dados: SELECT, INSERT, UPDATE e DELETE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5616.4.1 Sintaxe SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562

    6.4.1.1 Sintaxe JOIN . . . . . . . . . . . . . . . . . . . . . . . . 5676.4.1.2 Sintaxe UNION . . . . . . . . . . . . . . . . . . . . . . . 569

    6.4.2 Sintaxe de Subquery . . . . . . . . . . . . . . . . . . . . . . . . . . 5696.4.2.1 A Subquery como um Operandop Escalar

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5706.4.2.2 Comparacoes Usando Subquery . . . . . . . 5716.4.2.3 Subqueries with ANY, IN, and SOME . . . . 5716.4.2.4 Subqueries with ALL . . . . . . . . . . . . . . . . . . 5726.4.2.5 Correlated Subqueries . . . . . . . . . . . . . . . . 5726.4.2.6 EXISTS and NOT EXISTS . . . . . . . . . . . . . . 5736.4.2.7 Row Subqueries . . . . . . . . . . . . . . . . . . . . . . 5736.4.2.8 Subqueries in the FROM clause . . . . . . . . . 5746.4.2.9 Subquery Errors . . . . . . . . . . . . . . . . . . . . . 5756.4.2.10 Optimizing Subqueries . . . . . . . . . . . . . . 5766.4.2.11 Rewriting Subqueries for Earlier MySQL

    Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5776.4.3 Sintaxe INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578

    6.4.3.1 Sintaxe INSERT ... SELECT . . . . . . . . . . . 5816.4.3.2 Sintaxe INSERT DELAYED . . . . . . . . . . . . . . 581

    6.4.4 Sintaxe UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5836.4.5 Sintaxe DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5846.4.6 Sintaxe TRUNCATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5866.4.7 Sintaxe REPLACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5866.4.8 Sintaxe LOAD DATA INFILE . . . . . . . . . . . . . . . . . . . . . 5876.4.9 Sintaxe HANDLER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5956.4.10 Sintaxe DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596

    6.5 Definicao de Dados: CREATE, DROP e ALTER . . . . . . . . . . . . . . 5966.5.1 Sintaxe CREATE DATABASE . . . . . . . . . . . . . . . . . . . . . 596

  • xiii

    6.5.2 Sintaxe DROP DATABASE . . . . . . . . . . . . . . . . . . . . . . . 5966.5.3 Sintaxe CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . 597

    6.5.3.1 Alteracao de Especificacoes de Colunas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606

    6.5.4 Sintaxe ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . 6076.5.5 Sintaxe RENAME TABLE . . . . . . . . . . . . . . . . . . . . . . . . . 6116.5.6 Sintaxe DROP TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . 6116.5.7 Sintaxe CREATE INDEX . . . . . . . . . . . . . . . . . . . . . . . . . 6126.5.8 Sintaxe DROP INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

    6.6 Comandos Utilitarios Basicos do Usuario MySQL . . . . . . . . 6136.6.1 Sintaxe USE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6136.6.2 Sintaxe DESCRIBE (Obtem Informacoes Sobre

    Colunas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6136.7 Comandos Transacionais e de Lock do MySQL . . . . . . . . . . 614

    6.7.1 Sintaxe de START TRANSACTION, COMMIT e ROLLBACK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614

    6.7.2 Instrucoes que Nao Podem Ser Desfeitas . . . . . . . . 6156.7.3 Instrucoes que Fazem um Commit Implicito . . . . 6156.7.4 Sintaxe de SAVEPOINT e ROLLBACK TO SAVEPOINT

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6156.7.5 Sintaxe LOCK TABLES e UNLOCK TABLES . . . . . . . . . 6166.7.6 Sintaxe SET TRANSACTION . . . . . . . . . . . . . . . . . . . . . 618

    6.8 Pesquisa Full-text no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 6186.8.1 Restricoes Full-text . . . . . . . . . . . . . . . . . . . . . . . . . . . 6226.8.2 Ajuste Fino de Pesquisas Full-text no MySQL . . 6236.8.3 TODO de Pesquisas Full-text . . . . . . . . . . . . . . . . . . 624

    6.9 Cache de Consultas do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 6246.9.1 Como a Cache de Consultas Opera . . . . . . . . . . . . . 6256.9.2 Configuracao da Cache de Consultas . . . . . . . . . . . 6266.9.3 Opcoes da Cache de Consultas na SELECT . . . . . . 6276.9.4 Estado e Manutencao da Cache de Consultas . . . 627

    7 Tipos de Tabela do MySQL . . . . . . . . . . . . . . 6297.1 Tabelas MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629

    7.1.1 Espaco Necessario para Chaves . . . . . . . . . . . . . . . . 6327.1.2 Formatos de Tabelas MyISAM . . . . . . . . . . . . . . . . . . 633

    7.1.2.1 Caracteristicas de Tabelas Estaticas(Tamanho Fixo) . . . . . . . . . . . . . . . . . . . . . . . . . 633

    7.1.2.2 Caracteristicas de Tabelas Dinamicas . . 6337.1.2.3 Caracteristicas de Tabelas Compactadas

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6347.1.3 Problemas com Tabelas MyISAM . . . . . . . . . . . . . . . . 635

    7.1.3.1 Tabelas MyISAM Corrompidas . . . . . . . . . 6357.1.3.2 O Cliente esta usando a tabela ou nao a

    fechou de forma apropriada . . . . . . . . . . . . . . . 6367.2 Tabelas MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636

    7.2.1 Problemas com Tabelas MERGE . . . . . . . . . . . . . . . . . 6397.3 Tabelas ISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640

  • xiv

    7.4 Tabelas HEAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6407.5 Tabelas InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642

    7.5.1 Visao Geral de Tabelas InnoDB. . . . . . . . . . . . . . . . 6427.5.2 InnoDB no MySQL Versao 3.23 . . . . . . . . . . . . . . . . 6427.5.3 Opcoes de Inicializacao do InnoDB . . . . . . . . . . . . . 6437.5.4 Criando Tablespaces no InnoDB . . . . . . . . . . . . . . . 650

    7.5.4.1 Se Alguma Coisa Der Errado Na CriacaoDo Banco de Dados . . . . . . . . . . . . . . . . . . . . . . 651

    7.5.5 Criando Tabelas InnoDB . . . . . . . . . . . . . . . . . . . . . . 6517.5.5.1 Convertendo Tabelas MyISAM para

    InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6527.5.5.2 Restricoes FOREIGN KEY . . . . . . . . . . . . . . . 652

    7.5.6 Adicionando e Removendo Arquivos de Dados e Logdo InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655

    7.5.7 Fazendo Backup e Recuperando um Banco de DadosInnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655

    7.5.7.1 Forcando a recuperacao . . . . . . . . . . . . . . 6577.5.7.2 Ponto de Verificacao . . . . . . . . . . . . . . . . . 658

    7.5.8 Movendo um Banco de Dados InnoDB para OutraMaquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658

    7.5.9 Modelo Transacional do InnoDB . . . . . . . . . . . . . . . 6597.5.9.1 InnoDB e SET ... TRANSACTION ISOLATION

    LEVEL ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6597.5.9.2 Leitura Consistente sem Lock . . . . . . . . . 6617.5.9.3 Lock de Leitura SELECT ... FOR UPDATE e

    SELECT ... LOCK IN SHARE MODE . . . . . . . . . . 6617.5.9.4 Lock da Chave Seguinte: Evitando

    Problemas com Fantasmas . . . . . . . . . . . . . . . . 6627.5.9.5 Locks Definidos por Diferentes Instrucoes

    SQL no InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . 6627.5.9.6 Deteccao de Deadlock e Rollback . . . . . . 6637.5.9.7 Um Exemplo de Como a Leitura

    Consistente Funciona no InnoDB . . . . . . . . . . 6647.5.9.8 Como lidar com deadlocks? . . . . . . . . . . . 665

    7.5.10 Dicas de Ajuste de Desempenho . . . . . . . . . . . . . . 6667.5.10.1 SHOW INNODB STATUS e o Monitor InnoDB

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6677.5.11 Implementacao de Multi-versioning . . . . . . . . . . . 6697.5.12 Estrutura de Tabelas e Indices . . . . . . . . . . . . . . . . 670

    7.5.12.1 Estrutura Fisica do Indice . . . . . . . . . . . 6717.5.12.2 Buffer de Insercao . . . . . . . . . . . . . . . . . . . 6717.5.12.3 Indices Hash Adaptativos . . . . . . . . . . . . 6727.5.12.4 Estrutura dos Registros Fisicos . . . . . . 6727.5.12.5 Como Funciona uma Coluna

    AUTO_INCREMENT no InnoDB . . . . . . . . . . . . . . 6727.5.13 Gerenciamento do Espaco de Arquivos e E/S de

    Disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6737.5.13.1 E/S de Disco . . . . . . . . . . . . . . . . . . . . . . . 673

  • xv

    7.5.13.2 Gerenciamento do Espaco de Arquivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674

    7.5.13.3 Desfragmentando uma Tabela . . . . . . . . 6757.5.14 Tratando Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6757.5.15 Restricoes em Tabelas InnoDB . . . . . . . . . . . . . . . 6757.5.16 Historico de Alteracoes do InnoDB . . . . . . . . . . . . 677

    7.5.16.1 MySQL/InnoDB-4.1.1, December 4, 2003. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677

    7.5.16.2 MySQL/InnoDB-4.0.16, October 22, 2003. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677

    7.5.16.3 MySQL/InnoDB-3.23.58, September 15,2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677

    7.5.16.4 MySQL/InnoDB-4.0.15, September 10,2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677

    7.5.16.5 MySQL/InnoDB-4.0.14, Junho de 2003. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678

    7.5.16.6 MySQL/InnoDB-3.23.57, June 20, 2003. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679

    7.5.16.7 MySQL/InnoDB-4.0.13, 20 de Maio de2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679

    7.5.16.8 MySQL/InnoDB-4.1.0, 03 de Abril de2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680

    7.5.16.9 MySQL/InnoDB-3.23.56, 17 de Marco de2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680

    7.5.16.10 MySQL/InnoDB-4.0.12, 18 Marco de2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681

    7.5.16.11 MySQL/InnoDB-4.0.11, 25 de Fevereirode 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681

    7.5.16.12 MySQL/InnoDB-4.0.10, 04 de Fevereirode 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681

    7.5.16.13 MySQL/InnoDB-3.23.55, 24 de Janeirode 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682

    7.5.16.14 MySQL/InnoDB-4.0.9, 14 de Janeiro de2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682

    7.5.16.15 MySQL/InnoDB-4.0.8, 07 de Janeiro de2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683

    7.5.16.16 MySQL/InnoDB-4.0.7, 26 de Dezembrode 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683

    7.5.16.17 MySQL/InnoDB-4.0.6, 19 de Dezembrode 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683

    7.5.16.18 MySQL/InnoDB-3.23.54, 12 deDezembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . 684

    7.5.16.19 MySQL/InnoDB-4.0.5, 18 de Novembrode 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684

    7.5.16.20 MySQL/InnoDB-3.23.53, 09 de Outubrode 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685

    7.5.16.21 MySQL/InnoDB-4.0.4, 02 de Outubro de2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

  • xvi

    7.5.16.22 MySQL/InnoDB-4.0.3, 28 de Agosto de2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687

    7.5.16.23 MySQL/InnoDB-3.23.52, 16 de Agostode 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687

    7.5.16.24 MySQL/InnoDB-4.0.2, 10 de Julho de2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689

    7.5.16.25 MySQL/InnoDB-3.23.51, 12 de Junho de2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689

    7.5.16.26 MySQL/InnoDB-3.23.50, 23 de Abril de2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689

    7.5.16.27 MySQL/InnoDB-3.23.49, 17 de Fevereirode 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690

    7.5.16.28 MySQL/InnoDB-3.23.48, 09 de Fevereirode 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690

    7.5.16.29 MySQL/InnoDB-3.23.47, 28 deDezembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 691

    7.5.16.30 MySQL/InnoDB-4.0.1, 23 de Dezembrode 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692

    7.5.16.31 MySQL/InnoDB-3.23.46, 30 deNovembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 692

    7.5.16.32 MySQL/InnoDB-3.23.45, 23 deNovembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 692

    7.5.16.33 MySQL/InnoDB-3.23.44, 02 deNovembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 693

    7.5.16.34 MySQL/InnoDB-3.23.43, 04 de Outubrode 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693

    7.5.16.35 MySQL/InnoDB-3.23.42, 09 de Setembrode 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

    7.5.16.36 MySQL/InnoDB-3.23.41, 13 de Agostode 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

    7.5.16.37 MySQL/InnoDB-3.23.40, 16 de Julho de2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

    7.5.16.38 MySQL/InnoDB-3.23.39, 13 de Junho de2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

    7.5.16.39 MySQL/InnoDB-3.23.38, 12 de Maio de2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

    7.5.17 Informacoes de Contato do InnoDB . . . . . . . . . . . . 6947.6 Tabelas BDB ou BerkeleyDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695

    7.6.1 Visao Geral de Tabelas BDB. . . . . . . . . . . . . . . . . . . . 6957.6.2 Instalando BDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6957.6.3 Opcoes de Inicializacao do BDB . . . . . . . . . . . . . . . . . 6967.6.4 Caracteristicas de Tabelas BDB: . . . . . . . . . . . . . . . . 6977.6.5 Itens a serem corrigidos no BDB num futuro proximo:

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6987.6.6 Sistemas operacionais suportados pelo BDB . . . . . . 6987.6.7 Restricoes em Tabelas BDB . . . . . . . . . . . . . . . . . . . . 6997.6.8 Erros Que Podem Ocorrer Usando Tabelas BDB . . 699

  • xvii

    8 Introducao ao MaxDB . . . . . . . . . . . . . . . . . . . 7018.1 Historia do MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7018.2 Licenciamento e Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7018.3 Conceitos Basicos do MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . 7018.4 Diferencas de Recursos entre o MaxDB e o MySQL . . . . . . 7018.5 Interoperability Features between MaxDB and MySQL . . . 7028.6 MaxDB-related Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7028.7 Reserved Words in MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7038.8 Funcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7058.9 Tipos de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705

    9 Conjunto de Caracteres Nacionais e Unicode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7079.1 Conjuntos de Caracteres e Collations em Geral . . . . . . . . . . 7079.2 Conjunto de Caracteres e Collations no MySQL . . . . . . . . . 7089.3 Determinando o Conjunto de Caracteres e Collation Padroes

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7089.3.1 Conjunto de Caracteres e Collations do Servidor

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7089.3.2 Conjunto de Caracteres e Collation de Banco de

    Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7099.3.3 O Conjunto de Caracteres e Collations de Tabela

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7109.3.4 Conjunto de Caracteres e Collation de Colunas . . 7109.3.5 Exemplos de Atribuicoes de Conjuntos de Caracteres

    e Collation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7119.3.6 Conjunto de Caracteres e Collation de Conexao

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7129.3.7 Conjunto de Caracteres e Collation de Caracter de

    String Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7139.3.8 Clausula COLLATE em Varias Partes de uma Consulta

    SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7149.3.9 Precedencia da Clausula COLLATE . . . . . . . . . . . . . . 7149.3.10 Operador BINARY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7159.3.11 Alguns Casos Especiais Onde a Determinacao da

    Collation e Trabalhosa . . . . . . . . . . . . . . . . . . . . . . . . . . 7159.3.12 Collations Devem Ser para o Conjunto de

    Caracteres Certo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7169.3.13 Um exemplo do Efeito da Collation . . . . . . . . . . . 716

    9.4 Operacoes Afetadas pelo Suporte a Conjunto de Caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7169.4.1 Strings de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 7179.4.2 CONVERT() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7179.4.3 CAST() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7179.4.4 SHOW CHARACTER SET . . . . . . . . . . . . . . . . . . . . . . . . . . 7189.4.5 SHOW COLLATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7189.4.6 SHOW CREATE DATABASE . . . . . . . . . . . . . . . . . . . . . . . . 7199.4.7 SHOW FULL COLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . . 719

  • xviii

    9.5 Suporte Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7199.6 UTF8 para Metdados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7209.7 Compatibilidade com Outros SGBDs . . . . . . . . . . . . . . . . . . . 7219.8 Novo Formato do Arquivo de Configuracao do Conjunto de

    Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7219.9 Conjunto de Caracteres Nacional . . . . . . . . . . . . . . . . . . . . . . . 7219.10 Atualizando para o MySQL 4.0. . . . . . . . . . . . . . . . . . . . . . . . 722

    9.10.1 Conjunto de Caracteres do MySQL e oPar/Conjunto de Caracter/Collation Correspondentedo MySQL 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723

    9.11 Os conjuntos de Caracteres e Collations que o MySQLSuporta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723

    9.11.1 O Conjunto de Caracteres Unicode. . . . . . . . . . . . 7259.11.2 Conjunto de Caracteres para Plataformas

    Especificas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7259.11.3 Conjunto de Caracteres do Sul da Europa e Oriente

    Medio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7259.11.4 Os Conjuntos de Caracteres Asiaticos . . . . . . . . . 7259.11.5 Os Conjuntos de Caracteres Balticos . . . . . . . . . . 7269.11.6 Os Conjuntos de Caracteres Cirilicos . . . . . . . . . . 7269.11.7 O Conjunto de Caracteres da Europa Central . . 7279.11.8 Os Conjuntos de Caracteres da Europa Ocidental

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728

    10 Extensoes Espacias em MySQL . . . . . . . . . . 73010.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73010.2 O Modelo Geomatrico OpenGIS . . . . . . . . . . . . . . . . . . . . . . . 730

    10.2.1 A Hierarquia da Classe Geometry . . . . . . . . . . . . . 73110.2.2 Classe Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73210.2.3 Classe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73310.2.4 Classe Curve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73310.2.5 Classe LineString . . . . . . . . . . . . . . . . . . . . . . . . . . 73410.2.6 Classe Surface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73410.2.7 Classe Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73410.2.8 Classe GeometryCollection . . . . . . . . . . . . . . . . . 73510.2.9 Classe MultiPoint . . . . . . . . . . . . . . . . . . . . . . . . . . 73510.2.10 Classe MultiCurve . . . . . . . . . . . . . . . . . . . . . . . . . 73510.2.11 Classe MultiLineString (Multi Linhas) . . . . . 73610.2.12 Classe MultiSurface (Multi Superficies) . . . . . 73610.2.13 Classe MultiPolygon (Multi Poligonos) . . . . . . 736

    10.3 Formatos de Dados Espaciais Suportados . . . . . . . . . . . . . . 73710.3.1 Formato Well-Known Text (WKT). . . . . . . . . . . . 73710.3.2 Formato Well-Known Binary (WKB). . . . . . . . . . 738

    10.4 Criando um Banco de Dados MySQL HabilitadoEspacialmente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738

    10.4.1 Tipos de Dados Espaciais do MySQL . . . . . . . . . 73910.4.2 Criando Valores Espaciais . . . . . . . . . . . . . . . . . . . . 739

  • xix

    10.4.2.1 Criando Valores Geometry UsandoFuncoes WKT . . . . . . . . . . . . . . . . . . . . . . . . . . . 739

    10.4.2.2 Criando Valores Geometry UsandoFuncoes WKB . . . . . . . . . . . . . . . . . . . . . . . . . . . 740

    10.4.2.3 Criando uma Valor de Geometira UsandoFuncoes Especificas do MySQL . . . . . . . . . . . 741

    10.4.3 Criando Colunas Espaciais . . . . . . . . . . . . . . . . . . . 74210.4.4 Entrando com Dados em Colunas Espaciais . . . . 74310.4.5 Buscando Dados Espaciais . . . . . . . . . . . . . . . . . . . 744

    10.4.5.1 Buscando Dados Espaciais em umFormato Interno . . . . . . . . . . . . . . . . . . . . . . . . . 744

    10.4.5.2 Buscando Dados Espaciais no FormatoWKT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744

    10.4.5.3 Buscando Dados Espaciais no FormatoWKB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744

    10.5 Analisando Informacao Espacial . . . . . . . . . . . . . . . . . . . . . . . 74410.5.1 Funcoes Para Converter Geometrias Entre Formatos

    Diferentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74510.5.2 Funcoes de Analise das Propriedades de Geometry

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74510.5.2.1 Funcoes de Analise das Propriedades de

    Geometry em Geral . . . . . . . . . . . . . . . . . . . . . . 74610.5.2.2 Funcoes de Analise das Propriedades de

    Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74710.5.2.3 Funcoes de Analise das Propriedades de

    LineString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74810.5.2.4 Funcoes de Analise das Propriedades de

    MultiLineString . . . . . . . . . . . . . . . . . . . . . . . . 74910.5.2.5 Funcoes de Analise das Propriedades de

    Polygon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75010.5.2.6 Funcoes de Analise das Propriedades de

    MultiPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . 75110.5.2.7 Funcoes de Analise das Propriedades de

    GeometryCollection . . . . . . . . . . . . . . . . . . . . 75110.5.3 Funcoes Que Criam Novas Geometrias de Outras

    Existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75210.5.3.1 Funcoes de Geometria Que Produzem

    Novas Geometrias . . . . . . . . . . . . . . . . . . . . . . . . 75210.5.3.2 Operadores Espaciais . . . . . . . . . . . . . . . . 752

    10.5.4 Funcoes Para Testar Relacoes Espaciais EntreObjetos Geometricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753

    10.5.5 Relacoes de Retangulo de Limite Minimo (MinimalBounding Rectangles - MBR) em Geometrias . . . . . 753

    10.5.6 Funcoes que Testam Relacionamentos EspaciaisEntre Geometrias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754

    10.6 Otimizando Analises Espaciais . . . . . . . . . . . . . . . . . . . . . . . . 75510.6.1 Criando Indices Espaciais . . . . . . . . . . . . . . . . . . . . 75510.6.2 Usando Indice Espacial . . . . . . . . . . . . . . . . . . . . . . 756

  • xx

    10.7 Compatibilidade e Conformidade com o MySQL . . . . . . . . 75810.7.1 Recursos GIS Que Ainda Nao Estao Implementados

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758

    11 Stored Procedures e Funcoes . . . . . . . . . . . . 76011.1 Sintaxe de Stored Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . 760

    11.1.1 Maintaining Stored Procedures . . . . . . . . . . . . . . . 76111.1.1.1 CREATE PROCEDURE and CREATE FUNCTION

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76111.1.1.2 ALTER PROCEDURE and ALTER FUNCTION

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76311.1.1.3 DROP PROCEDURE and DROP FUNCTION . . 76311.1.1.4 SHOW CREATE PROCEDURE and SHOW CREATE

    FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76311.1.2 SHOW PROCEDURE STATUS and SHOW FUNCTION

    STATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76411.1.3 CALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76411.1.4 BEGIN ... END Compound Statement . . . . . . . . . 76411.1.5 DECLARE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 76411.1.6 Variables in Stored Procedures . . . . . . . . . . . . . . . 764

    11.1.6.1 DECLARE Local Variables . . . . . . . . . . . . . 76511.1.6.2 Variable SET Statement. . . . . . . . . . . . . . 76511.1.6.3 SELECT ... INTO Statement . . . . . . . . . 765

    11.1.7 Conditions and Handlers . . . . . . . . . . . . . . . . . . . . . 76511.1.7.1 DECLARE Conditions . . . . . . . . . . . . . . . . . 76511.1.7.2 DECLARE Handlers . . . . . . . . . . . . . . . . . . . 765

    11.1.8 Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76711.1.8.1 Declaring Cursors . . . . . . . . . . . . . . . . . . . 76811.1.8.2 Cursor OPEN Statement . . . . . . . . . . . . . . 76811.1.8.3 Cursor FETCH Statement . . . . . . . . . . . . . 76811.1.8.4 Cursor CLOSE Statement . . . . . . . . . . . . . 768

    11.1.9 Flow Control Constructs . . . . . . . . . . . . . . . . . . . . . 76811.1.9.1 IF Statement . . . . . . . . . . . . . . . . . . . . . . . 76811.1.9.2 CASE Statement . . . . . . . . . . . . . . . . . . . . . 76811.1.9.3 LOOP Statement . . . . . . . . . . . . . . . . . . . . . 76911.1.9.4 LEAVE Statement . . . . . . . . . . . . . . . . . . . . 76911.1.9.5 ITERATE Statement . . . . . . . . . . . . . . . . . 76911.1.9.6 REPEAT Statement. . . . . . . . . . . . . . . . . . . 77011.1.9.7 WHILE Statement . . . . . . . . . . . . . . . . . . . . 770

  • xxi

    12 Ferramentas de Clientes e APIs do MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77212.1 API C do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772

    12.1.1 Tipos de Dados da API C . . . . . . . . . . . . . . . . . . . . 77212.1.2 Visao Geral das Funcao da API C . . . . . . . . . . . . 77512.1.3 Descricao das Funcoes da API C . . . . . . . . . . . . . . 779

    12.1.3.1 mysql_affected_rows() . . . . . . . . . . . . 78012.1.3.2 mysql_change_user() . . . . . . . . . . . . . . 78112.1.3.3 mysql_character_set_name(). . . . . . . 78212.1.3.4 mysql_close() . . . . . . . . . . . . . . . . . . . . . 78212.1.3.5 mysql_connect() . . . . . . . . . . . . . . . . . . . 78312.1.3.6 mysql_create_db() . . . . . . . . . . . . . . . . 78312.1.3.7 mysql_data_seek() . . . . . . . . . . . . . . . . 78412.1.3.8 mysql_debug() . . . . . . . . . . . . . . . . . . . . . 78512.1.3.9 mysql_drop_db() . . . . . . . . . . . . . . . . . . . 78512.1.3.10 mysql_dump_debug_info() . . . . . . . . . 78612.1.3.11 mysql_eof() . . . . . . . . . . . . . . . . . . . . . . 78612.1.3.12 mysql_errno() . . . . . . . . . . . . . . . . . . . . 78812.1.3.13 mysql_error() . . . . . . . . . . . . . . . . . . . . 78812.1.3.14 mysql_escape_string() . . . . . . . . . . . 78912.1.3.15 mysql_fetch_field() . . . . . . . . . . . . . 78912.1.3.16 mysql_fetch_fields() . . . . . . . . . . . . 79012.1.3.17 mysql_fetch_field_direct() . . . . . 79112.1.3.18 mysql_fetch_lengths() . . . . . . . . . . . 79212.1.3.19 mysql_fetch_row() . . . . . . . . . . . . . . . 79212.1.3.20 mysql_field_count() . . . . . . . . . . . . . 79412.1.3.21 mysql_field_seek() . . . . . . . . . . . . . . 79512.1.3.22 mysql_field_tell() . . . . . . . . . . . . . . 79512.1.3.23 mysql_free_result() . . . . . . . . . . . . . 79612.1.3.24 mysql_get_client_info() . . . . . . . . . 79612.1.3.25 mysql_get_host_info() . . . . . . . . . . . 79612.1.3.26 mysql_get_proto_info() . . . . . . . . . . 79712.1.3.27 mysql_get_server_info() . . . . . . . . . 79712.1.3.28 mysql_get_server_version() . . . . . 79812.1.3.29 mysql_info() . . . . . . . . . . . . . . . . . . . . . 79812.1.3.30 mysql_init() . . . . . . . . . . . . . . . . . . . . . 79912.1.3.31 mysql_insert_id() . . . . . . . . . . . . . . . 79912.1.3.32 mysql_kill() . . . . . . . . . . . . . . . . . . . . . 80012.1.3.33 mysql_list_dbs() . . . . . . . . . . . . . . . . . 80112.1.3.34 mysql_list_fields() . . . . . . . . . . . . . 80112.1.3.35 mysql_list_processes() . . . . . . . . . . 80212.1.3.36 mysql_list_tables() . . . . . . . . . . . . . 80212.1.3.37 mysql_num_fields() . . . . . . . . . . . . . . 80312.1.3.38 mysql_num_rows() . . . . . . . . . . . . . . . . . 80512.1.3.39 mysql_options() . . . . . . . . . . . . . . . . . . 80512.1.3.40 mysql_ping() . . . . . . . . . . . . . . . . . . . . . 80712.1.3.41 mysql_query() . . . . . . . . . . . . . . . . . . . . 80812.1.3.42 mysql_real_connect() . . . . . . . . . . . . 809

  • xxii

    12.1.3.43 mysql_real_escape_string() . . . . . 81112.1.3.44 mysql_real_query() . . . . . . . . . . . . . . 81312.1.3.45 mysql_reload() . . . . . . . . . . . . . . . . . . . 81312.1.3.46 mysql_row_seek() . . . . . . . . . . . . . . . . . 81412.1.3.47 mysql_row_tell() . . . . . . . . . . . . . . . . . 81412.1.3.48 mysql_select_db() . . . . . . . . . . . . . . . 81512.1.3.49 mysql_set_server_option() . . . . . . . 81512.1.3.50 mysql_shutdown() . . . . . . . . . . . . . . . . . 81612.1.3.51 mysql_sqlstate() . . . . . . . . . . . . . . . . . 81712.1.3.52 mysql_ssl_set() . . . . . . . . . . . . . . . . . . 81712.1.3.53 mysql_stat() . . . . . . . . . . . . . . . . . . . . . 81812.1.3.54 mysql_store_result() . . . . . . . . . . . . 81812.1.3.55 mysql_thread_id() . . . . . . . . . . . . . . . 82012.1.3.56 mysql_use_result() . . . . . . . . . . . . . . 82012.1.3.57 mysql_commit() . . . . . . . . . . . . . . . . . . . 82112.1.3.58 mysql_rollback() . . . . . . . . . . . . . . . . . 82212.1.3.59 mysql_autocommit() . . . . . . . . . . . . . . 82212.1.3.60 mysql_more_results() . . . . . . . . . . . . 82212.1.3.61 mysql_next_result() . . . . . . . . . . . . . 823

    12.1.4 Instrucoes Preparadas da API C . . . . . . . . . . . . . . 82412.1.5 Tipos de Dados de Instrucoes Preparadas da API C

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82412.1.6 Visao Geral das Funcoes de Instrucoes Preparadas

    da API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82712.1.7 Descricao das Funcoes de Instrucao Preparada da

    API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82912.1.7.1 mysql_prepare() . . . . . . . . . . . . . . . . . . . 82912.1.7.2 mysql_param_count() . . . . . . . . . . . . . . 83112.1.7.3 mysql_get_metadata() . . . . . . . . . . . . . 83112.1.7.4 mysql_bind_param() . . . . . . . . . . . . . . . 83212.1.7.5 mysql_execute() . . . . . . . . . . . . . . . . . . . 83312.1.7.6 mysql_stmt_affected_rows(). . . . . . . 83712.1.7.7 mysql_bind_result() . . . . . . . . . . . . . . 83812.1.7.8 mysql_stmt_store_result() . . . . . . . . 83912.1.7.9 mysql_stmt_data_seek() . . . . . . . . . . . 84012.1.7.10 mysql_stmt_row_seek() . . . . . . . . . . . 84012.1.7.11 mysql_stmt_row_tell() . . . . . . . . . . . 84112.1.7.12 mysql_stmt_num_rows() . . . . . . . . . . . 84112.1.7.13 mysql_fetch() . . . . . . . . . . . . . . . . . . . . 84212.1.7.14 mysql_send_long_data() . . . . . . . . . . 84712.1.7.15 mysql_stmt_close() . . . . . . . . . . . . . . 84912.1.7.16 mysql_stmt_errno() . . . . . . . . . . . . . . 85012.1.7.17 mysql_stmt_error() . . . . . . . . . . . . . . 85012.1.7.18 mysql_stmt_sqlstate() . . . . . . . . . . . 851

    12.1.8 Tratando a Execucao de Multiplas Consultas naAPI C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851

    12.1.9 Manipulando Valores de Data e Hora na API C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852

  • xxiii

    12.1.10 Descricao das Funcoes de Threads da API C . . 85412.1.10.1 my_init() . . . . . . . . . . . . . . . . . . . . . . . . 85412.1.10.2 mysql_thread_init() . . . . . . . . . . . . . 85412.1.10.3 mysql_thread_end() . . . . . . . . . . . . . . 85412.1.10.4 mysql_thread_safe() . . . . . . . . . . . . . 855

    12.1.11 Descricao das Funcoes do Servidor Embutido daAPI C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855

    12.1.11.1 mysql_server_init() . . . . . . . . . . . . . 85512.1.11.2 mysql_server_end() . . . . . . . . . . . . . . 856

    12.1.12 Duvidas e problemas comuns ao utilzar a API C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85712.1.12.1 Porque Algumas Vezes

    mysql_store_result() Retorna NULL Aposmysql_query() Returnar com Sucesso? . . . . 857

    12.1.12.2 Que Resultados Posso Onbetr de umaConsulta? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857

    12.1.12.3 Como Posso Obter a ID Unica para aUltima Linha Inserida? . . . . . . . . . . . . . . . . . . . 857

    12.1.12.4 Problemas com Ligacao na API C . . . 85812.1.13 Construindo Programas Clientes . . . . . . . . . . . . . 85812.1.14 Como Fazer um Cliente em Threads . . . . . . . . . 85912.1.15 libmysqld, a Biblioteca do Servidor Embutido

    MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86012.1.15.1 Visao Geral da Biblioteca do Servidor

    MySQL Embutido . . . . . . . . . . . . . . . . . . . . . . . 86012.1.15.2 Compilando Programas com libmysqld

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86112.1.15.3 Restricoes no Uso de um Servidor

    MySQL Embutido . . . . . . . . . . . . . . . . . . . . . . . 86112.1.15.4 Usando Arquivo de Opcoes com o

    Servidor Embutido . . . . . . . . . . . . . . . . . . . . . . . 86112.1.15.5 Itens a Fazer no Servidor Embutido

    (TODO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86212.1.15.6 Um Exemplo Simples de Servidor

    Embutido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86212.1.15.7 Licensiando o Servidor Embutido . . . 866

    12.2 Suporte ODBC ao MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86612.2.1 Como Instalar o MyODBC . . . . . . . . . . . . . . . . . . . 86612.2.2 Como Preencher os Varios Campos no Programa de

    Administracao do ODBC . . . . . . . . . . . . . . . . . . . . . . . . 86712.2.3 Parametros de Conexao do MyODBC . . . . . . . . . 86812.2.4 Como Relatar Problemas com o MyODBC . . . . 86912.2.5 Programas que Funcionam com MyODBC . . . . . 87012.2.6 Como Obter o Valor de uma Coluna

    AUTO_INCREMENT no ODBC . . . . . . . . . . . . . . . . . . . . . . 87412.2.7 Relatando Problemas com MyODBC . . . . . . . . . . 875

    12.3 Conectividade Java (JDBC) ao MySQL . . . . . . . . . . . . . . . . 87612.4 API PHP do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876

  • xxiv

    12.4.1 Problemas Comuns com MySQL e PHP . . . . . . . 87612.5 API Perl do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876

    12.5.1 DBI com DBD::mysql . . . . . . . . . . . . . . . . . . . . . . . . 87712.5.2 A interface DBI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87712.5.3 Mais Informacoes DBI/DBD . . . . . . . . . . . . . . . . . . . 883

    12.6 API C++ do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88312.6.1 Borland C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883

    12.7 API Python do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88412.8 API Tcl do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88412.9 Eiffel Wrapper do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884

    13 Tratamento de Erros no MySQL . . . . . . . . . 88513.1 Erros Retornados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885

    14 Estendendo o MySQL. . . . . . . . . . . . . . . . . . . 89214.1 MySQL Internals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892

    14.1.1 Threads MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89214.1.2 Pacotes de Teste do MySQL . . . . . . . . . . . . . . . . . . 892

    14.1.2.1 Executando o Pacote de Testes do MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893

    14.1.2.2 Extendendo o Pacote de Teste do MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893

    14.1.2.3 Relatando Bugs no Pacote de Teste doMySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894

    14.2 Adicionando Novas Funcoes ao MySQL . . . . . . . . . . . . . . . . 89514.2.1 Sintaxe CREATE FUNCTION/DROP FUNCTION . . . . . 89614.2.2 Adicionando Novas Funcoes Definidas Por Usuario

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89614.2.2.1 Sequencia de Chamadas UDF para

    Funcoes Simples . . . . . . . . . . . . . . . . . . . . . . . . . 89814.2.2.2 Sequencia de Chamadas UDF para

    Funcoes Agregadas . . . . . . . . . . . . . . . . . . . . . . . 89914.2.2.3 Processando Argumentos . . . . . . . . . . . . 90014.2.2.4 Valor de Retorno e Tartamento de Erros

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90214.2.2.5 Compilando e Instalando Funcoes

    Definidas Por Usuario . . . . . . . . . . . . . . . . . . . . 90214.2.3 Adicionando uma Nova Funcao Nativa . . . . . . . . 904

    14.3 Adicionado Novos Procedimentos ao MySQL . . . . . . . . . . . 90514.3.1 Analise de Procedimento . . . . . . . . . . . . . . . . . . . . . 90514.3.2 Escrevendo um Procedimento. . . . . . . . . . . . . . . . . 906

  • xxv

    Apendice A Problemas e Erros Comuns . . . . . 907A.1 Como Determinar o Que Esta Causando Problemas . . . . . 907A.2 Erros Comuns Usando o MySQL . . . . . . . . . . . . . . . . . . . . . . . 908

    A.2.1 Erro: Access Denied . . . . . . . . . . . . . . . . . . . . . . . . . 908A.2.2 Erro: MySQL server has gone away . . . . . . . . . . . . 908A.2.3 Erro: Cant connect to [local] MySQL server

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909A.2.4 Erro: Client does not support authentication

    protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911A.2.5 Erro: Host ... is blocked . . . . . . . . . . . . . . . . . 912A.2.6 Erro: Too many connections . . . . . . . . . . . . . . . . . 912A.2.7 Erro: Some non-transactional changed tables

    couldnt be rolled back . . . . . . . . . . . . . . . . . . . . . . . 912A.2.8 Erro: Out of memory . . . . . . . . . . . . . . . . . . . . . . . . . 913A.2.9 Erro: Packet too large . . . . . . . . . . . . . . . . . . . . . . 913A.2.10 Erros de Comunicacao / Comunicacao Abortada

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914A.2.11 Erro: The table is full . . . . . . . . . . . . . . . . . . . . 915A.2.12 Erro: Cant create/write to file . . . . . . . . . . 915A.2.13 Erro no Cliente: Commands out of sync . . . . . . . 916A.2.14 Erro: Ignoring user . . . . . . . . . . . . . . . . . . . . . . . . 916A.2.15 Erro: Table xxx doesnt exist . . . . . . . . . . . 916A.2.16 Erro: Cant initialize character set xxx . . 917A.2.17 Arquivo Nao Encontrado . . . . . . . . . . . . . . . . . . . . 917

    A.3 Assuntos Relacionados a Instalacao . . . . . . . . . . . . . . . . . . . . 918A.3.1 Problemas de Ligacao com a Biblioteca do Cliente

    MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918A.3.2 Como Executar o MySQL Como Um Usuario

    Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919A.3.3 Problemas com Permissoes de Arquivos . . . . . . . . 920

    A.4 Assuntos Relacionados a Administracao . . . . . . . . . . . . . . . . 920A.4.1 O Que Fazer Se o MySQL Continua Falhando . . 921A.4.2 Como Recuperar uma Senha de Root Esquecida

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923A.4.3 Como o MySQL Trata de Discos Sem Espaco . . 924A.4.4 Onde o MySQL Armazena Arquivos Temporarios

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924A.4.5 Como Proteger ou AlterarHow to Protect or Change

    the MySQL Socket File /tmp/mysql.sock . . . . . . . 925A.4.6 Problemas Com Fuso Horario . . . . . . . . . . . . . . . . . 926

    A.5 Assuntos Relacionados a Consultas . . . . . . . . . . . . . . . . . . . . . 926A.5.1 Caso-Sensitivito em Pesquisas . . . . . . . . . . . . . . . . . 926A.5.2 Problemas Usando Colunas DATE . . . . . . . . . . . . . . 926A.5.3 Problemas com Valores NULL . . . . . . . . . . . . . . . . . . 928A.5.4 Problemas com alias . . . . . . . . . . . . . . . . . . . . . . . . 929A.5.5 Deletando Linhas de Tabelas Relacionadas . . . . . 929A.5.6 Resolvendo Problemas Com Registros Nao

    Encontrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930

  • xxvi

    A.5.7 Problemas com Comparacao de Ponto Flutuante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930

    A.6 Assuntos Relacionados ao Otimizador . . . . . . . . . . . . . . . . . . 932A.6.1 Camo evitar o varredura da tabela,,, . . . . . . . . . . . 933

    A.7 Assuntos Relacionados a Definicoes de Tabelas . . . . . . . . . . 933A.7.1 Problemas com ALTER TABLE. . . . . . . . . . . . . . . . . . 933A.7.2 Como Alterar a Ordem das Colunas em Uma Tabela

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934A.7.3 Problemas com TEMPORARY TABLE . . . . . . . . 934

    Apendice B Colaboradores do MySQL . . . . . . 936B.1 Desenvolvedores do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 936B.2 Coolaboradores do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939B.3 Responsaveis pela Documentacao e Traducao . . . . . . . . . . . 943B.4 Bibliotecas usadas e incluidas com o MySQL . . . . . . . . . . . . 944B.5 Pacotes que suportam o MySQL . . . . . . . . . . . . . . . . . . . . . . . 945B.6 Ferramentas que sao usadas para criar o MySQL . . . . . . . . 946B.7 Responsaveis pelo Suporte do MySQL . . . . . . . . . . . . . . . . . . 946

    Apendice C Historico de Alteracoes do MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948C.1 Alteracoes na distribuicao 5.0.0 (Development) . . . . . . . . . . 948C.2 Alteracoes na distribuicao 4.1.x (Alpha) . . . . . . . . . . . . . . . . 948

    C.2.1 Alteracoes na distribuicao 4.1.2 (not released yet). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949

    C.2.2 Alteracoes na distribuicao 4.1.1 (01 de Dez de 2003). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950

    C.2.3 Alteracoes na distribuicao 4.1.0 (03 Apr 2003:Alpha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954

    C.3 Alteracoes na distribuicao 4.0.x (Production) . . . . . . . . . . . 956C.3.1 Alteracoes na distribuicao 4.0.17 (not released yet)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957C.3.2 Alteracoes na distribuicao 4.0.16 (17 Out 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959C.3.3 Alteracoes na distribuicao 4.0.15 (03 Sep 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961C.3.4 Alteracoes na distribuicao 4.0.14 (18 Jul 2003) . . 965C.3.5 Alteracoes na distribuicao 4.0.13 (16 May 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969C.3.6 Alteracoes na distribuicao 4.0.12 (15 Mar 2003:

    Production) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972C.3.7 Alteracoes na distribuicao 4.0.11 (20 Feb 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974C.3.8 Alteracoes na distribuicao 4.0.10 (29 Jan 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975C.3.9 Alteracoes na distribuicao 4.0.9 (09 Jan 2003) . . 976

  • xxvii

    C.3.10 Alteracoes na distribuicao 4.0.8 (07 Jan 2003). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977

    C.3.11 Alteracoes na distribuicao 4.0.7 (20 Dec 2002). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977

    C.3.12 Alteracoes na distribuicao 4.0.6 (14 Dec 2002:Gamma) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978

    C.3.13 Alteracoes na distribuicao 4.0.5 (13 Nov 2002). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979

    C.3.14 Alteracoes na distribuicao 4.0.4 (29 Sep 2002). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981

    C.3.15 Alteracoes na distribuicao 4.0.3 (26 Aug 2002:Beta) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983

    C.3.16 Alteracoes na distribuicao 4.0.2 (01 Jul 2002) . . 985C.3.17 Alteracoes na distribuicao 4.0.1 (23 Dec 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988C.3.18 Alteracoes na distribuicao 4.0.0 (Oct 2001: Alpha)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989C.4 Alteracoes na distribuicao 3.23.x (Recent; still supported)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991C.4.1 Alteracoes na distribuicao 3.23.59 (not released yet)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991C.4.2 Alteracoes na distribuicao 3.23.58 (11 Sep 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992C.4.3 Alteracoes na distribuicao 3.23.57 (06 Jun 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992C.4.4 Alteracoes na distribuicao 3.23.56 (13 Mar 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993C.4.5 Alteracoes na distribuicao 3.23.55 (23 Jan 2003)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994C.4.6 Alteracoes na distribuicao 3.23.54 (05 Dec 2002)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995C.4.7 Alteracoes na distribuicao 3.23.53 (09 Oct 2002)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996C.4.8 Alteracoes na distribuicao 3.23.52 (14 Aug 2002)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997C.4.9 Alteracoes na distribuicao 3.23.51 (31 May 2002)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997C.4.10 Alteracoes na distribuicao 3.23.50 (21 Apr 2002)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998C.4.11 Alteracoes na distribuicao 3.23.49 . . . . . . . . . . . . 999C.4.12 Alteracoes na distribuicao 3.23.48 (07 Feb 2002)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999C.4.13 Alteracoes na distribuicao 3.23.47 (27 Dec 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000C.4.14 Alteracoes na distribuicao 3.23.46 (29 Nov 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000C.4.15 Alteracoes na distribuicao 3.23.45 (22 Nov 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001

  • xxviii

    C.4.16 Alteracoes na distribuicao 3.23.44 (31 Oct 2001). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001

    C.4.17 Alteracoes na distribuicao 3.23.43 (04 Oct 2001). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002

    C.4.18 Alteracoes na distribuicao 3.23.42 (08 Sep 2001). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003

    C.4.19 Alteracoes na distribuicao 3.23.41 (11 Aug 2001). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004

    C.4.20 Alteracoes na distribuicao 3.23.40 . . . . . . . . . . . 1004C.4.21 Alteracoes na distribuicao 3.23.39 (12 Jun 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005C.4.22 Alteracoes na distribuicao 3.23.38 (09 May 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005C.4.23 Alteracoes na distribuicao 3.23.37 (17 Apr 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006C.4.24 Alteracoes na distribuicao 3.23.36 (27 Mar 2001)

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .