1145
i Sum´ ario 1 Informa¸c˜oesGerais ........................ 1 1.1 Sobre Este Manual ...................................... 2 1.1.1 Conven¸ oes Usadas Neste Manual ................ 2 1.2 Vis˜ao Geral do Sistema de Gerenciamento de Banco de Dados MySQL ................................................. 3 1.2.1 Hist´oria do MySQL ............................. 5 1.2.2 As Principais Caracter ´ isticas do MySQL .......... 5 1.2.3 Estabilidade do MySQL ......................... 8 1.2.4 Qual o Tamanho Que as Tabelas do MySQL Podem Ter? ............................................. 9 1.2.5 Compatibilidade Com o Ano 2000 (Y2K) ........ 11 1.3 Vis˜ao Geral da MySQL AB ............................. 12 1.3.1 O Modelo de Neg´ocio e Servi¸cos da MySQL AB .. 13 1.3.1.1 Suporte .............................. 13 1.3.1.2 Treinamento e Certifica¸c˜ ao ............. 13 1.3.1.3 Consultoria ........................... 14 1.3.1.4 Licen¸casComerciais ................... 14 1.3.1.5 Parcerias ............................. 15 1.3.2 Informa¸c˜ oes para Contato ...................... 15 1.4 Suporte e Licenciamento do MySQL ..................... 16 1.4.1 Suporte Oferecido pela MySQL AB ............. 16 1.4.2 Copyrights e Licen¸cas Usadas pelo MySQL ...... 17 1.4.3 Licen¸cas do MySQL ........................... 18 1.4.3.1 Usando o Programa MySQL Sob uma Licen¸caComercial ........................ 18 1.4.3.2 Usando o Programa MySQL Sem Custo Sob GPL ................................. 19 1.4.4 Logomarcas e Marcas Registradas da MySQL AB ................................................ 19 1.4.4.1 O Logo Original do MySQL ............ 20 1.4.4.2 Logomarcas da MySQL que Podem Ser Usadas Sem Permiss˜ ao de Altera¸c˜ ao ........ 20 1.4.4.3 Quando Vocˆ e Precisa de Permiss˜ ao de Altera¸c˜ ao 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 Impresso ouApresenta¸c˜ ao .......................... 21 1.4.4.6 Usando a Palavra MySQL em Nomes de Companhias e Produtos ................... 21 1.5 Mapa de Desenvolvimento do MySQL .................... 21 1.5.1 MySQL 4.0 in a Nutshell ....................... 22

Curso Completo de MySQL

Embed Size (px)

Citation preview

i

Sum ario1 Informa c oes Gerais . . . . . . . . . . . . . . . . . . . . . . . . 11.1 1.2 Sobre Este Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.1 Conven c oes Usadas Neste Manual . . . . . . . . . . . . . . . . 2 Vis ao Geral do Sistema de Gerenciamento de Banco de Dados MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1 Hist oria do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2 As Principais Caracter isticas do MySQL . . . . . . . . . . 5 1.2.3 Estabilidade do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.4 Qual o Tamanho Que as Tabelas do MySQL Podem Ter? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.5 Compatibilidade Com o Ano 2000 (Y2K) . . . . . . . . 11 Vis ao Geral da MySQL AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.1 O Modelo de Neg ocio e Servi cos da MySQL AB . . 13 1.3.1.1 Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3.1.2 Treinamento e Certica c ao . . . . . . . . . . . . . 13 1.3.1.3 Consultoria . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3.1.4 Licen cas Comerciais . . . . . . . . . . . . . . . . . . . 14 1.3.1.5 Parcerias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.3.2 Informa c oes para Contato . . . . . . . . . . . . . . . . . . . . . . 15 Suporte e Licenciamento do MySQL . . . . . . . . . . . . . . . . . . . . . 16 1.4.1 Suporte Oferecido pela MySQL AB . . . . . . . . . . . . . 16 1.4.2 Copyrights e Licen cas Usadas pelo MySQL . . . . . . 17 1.4.3 Licen cas do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.4.3.1 Usando o Programa MySQL Sob uma Licen ca Comercial . . . . . . . . . . . . . . . . . . . . . . . . 18 1.4.3.2 Usando o Programa MySQL Sem Custo Sob GPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.4 Logomarcas e Marcas Registradas da MySQL AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.4.1 O Logo Original do MySQL . . . . . . . . . . . . 20 1.4.4.2 Logomarcas da MySQL que Podem Ser Usadas Sem Permiss ao de Altera c ao . . . . . . . . 20 1.4.4.3 Quando Voc e Precisa de Permiss ao de Altera c ao 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 Impresso ou Apresenta c ao . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.4.4.6 Usando a Palavra MySQL em Nomes de Companhias e Produtos . . . . . . . . . . . . . . . . . . . 21 Mapa de Desenvolvimento do MySQL . . . . . . . . . . . . . . . . . . . . 21 1.5.1 MySQL 4.0 in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . 22

1.3

1.4

1.5

ii 1.5.1.1 Recursos Dispon iveis no MySQL 4.0 . . . . 22 1.5.1.2 Servidor Embutido MySQL . . . . . . . . . . . . 23 1.5.2 MySQL 4.1 in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . 24 1.5.2.1 Recursos Dispon iveis no MySQL 4.1 . . . . 24 1.5.2.2 Stepwise Rollout . . . . . . . . . . . . . . . . . . . . . . 26 1.5.2.3 Pronto para Uso em Desenvolvimento Imediato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.5.3 MySQL 5.0, A Pr oxima Distribui c ao de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.6 MySQL e o Futuro (o TODO) . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.6.1 Novos Recursos Planejados Para a Vers ao 4.1 . . . . 26 1.6.2 Novos Recursos Planejados Para a Vers ao 5.0 . . . . 27 1.6.3 Novos Recursos Planejados Para a Vers ao 5.1 . . . . 28 1.6.4 Novos Recursos Planejados Para a Vers ao em um Futuro Pr oximo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.6.5 Novos Recursos Planejados Para a Vers ao em um Futuro a M edio Prazo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.6.6 Novos Recursos que N ao Planejamos Fazer . . . . . . 32 1.7 Fontes de Informa c oes do MySQL . . . . . . . . . . . . . . . . . . . . . . . 33 1.7.1 Listas de Discuss ao MySQL . . . . . . . . . . . . . . . . . . . . 33 1.7.1.1 As Listas de Discuss ao do MySQL . . . . . . 33 1.7.1.2 Fazendo perguntas ou relatando erros . . . 35 1.7.1.3 Como relatar erros ou problemas . . . . . . . 36 1.7.1.4 Guia para responder quest oes na lista de discuss ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 1.7.2 Suporte a Comunidade MySQL Atrv es do IRC (Internet Relay Chat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 1.8 Qual compatibilidade aos padr oes o MySQL oferece ? . . . . . 41 1.8.1 Qual Padr ao o MySQL Segue? . . . . . . . . . . . . . . . . . . 42 1.8.2 Executando o MySQL no modo ANSI . . . . . . . . . . . 42 1.8.3 Extens oes do MySQL para o Padr ao SQL-92 . . . . . 43 1.8.4 Diferen cas do MySQL em Compara c ao com o SQL-92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 1.8.4.1 Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 1.8.4.2 SELECT INTO TABLE . . . . . . . . . . . . . . . . . . . 46 1.8.4.3 Transa c oes e Opera c oes At omicas . . . . . . 46 1.8.4.4 Stored Procedures e Triggers . . . . . . . . . . . 49 1.8.4.5 Chaves Estrangeiras . . . . . . . . . . . . . . . . . . . 49 1.8.4.6 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 1.8.4.7 -- como In icio de Coment ario . . . . . . . . 51 1.8.5 Como o MySQL Lida com Restri c oes . . . . . . . . . . . . 52 1.8.5.1 Restri c oes de PRIMARY KEY / UNIQUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 1.8.5.2 Restri c oes de NOT NULL . . . . . . . . . . . . . . . . 53 1.8.5.3 Restri c oes de ENUM e SET . . . . . . . . . . . . . . . 53 1.8.6 Erros Conhecidos e Deci encias de Projetos no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

iii 1.8.6.1 Erros da Vers ao 3.23 Corrigidos em Vers oes Posteriores do MySQL . . . . . . . . . . . . . . . . . . . . 53 1.8.6.2 Open Bugs / Deci encias de Projeto no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2

Instala c ao do MySQL . . . . . . . . . . . . . . . . . . . . . 602.1 Instala c ao r apida padr ao do MySQL . . . . . . . . . . . . . . . . . . . . . 60 2.1.1 Instalando o MySQL no Windows . . . . . . . . . . . . . . . 60 2.1.1.1 Exig encias do Sistema Windows . . . . . . . . 61 2.1.1.2 Instalando uma Distribui c ao Bin aria do Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 2.1.1.3 Preparando o Ambiente MySQL do Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.1.1.4 Selecionando um Servidor Windows . . . . 63 2.1.1.5 Iniciando o Servidor pela Primeira Vez . . 64 2.1.1.6 Iniciando o MySQL no Windows 95, 98, ou Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 2.1.1.7 Iniciando o MySQL no Windows NT, 2000, ou XP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 2.1.1.8 Executando o MySQL no Windows . . . . . 68 2.1.2 Instalando o MySQL no Linux . . . . . . . . . . . . . . . . . . 69 2.1.3 Instalando o MySQL no Mac OS X . . . . . . . . . . . . . 71 2.1.4 Instalando o MySQL no NetWare . . . . . . . . . . . . . . . 73 2.1.4.1 Instalando o MySQL para Bin arios do NetWare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2.2 Detalhes Gerais de Instala c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.2.1 Como obter o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.2.2 Vericando a Integridade do Pacote Usando MD5 Checksums ou GnuPG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.2.3 Sistemas Operacionais suportados pelo MySQL . . 78 2.2.4 Qual vers ao do MySQL deve ser usada . . . . . . . . . . 80 2.2.5 Layouts de Instala c ao . . . . . . . . . . . . . . . . . . . . . . . . . . 83 2.2.6 Como e quando as atualiza c oes s ao lan cadas? . . . . 84 2.2.7 Filosoa das Distribui c oes - Nenhum Bug Conhecidos nas Distribui c oes . . . . . . . . . . . . . . . . . . . . . 84 2.2.8 Bin arios MySQL compilados pela MySQL AB . . . 86 2.2.9 Instalando uma Distribui c ao Bin aria do MySQL . . 91 2.3 Instalando uma distribui c ao com fontes do MySQL . . . . . . . 93 2.3.1 Vis ao geral da instala c ao r apida . . . . . . . . . . . . . . . . 94 2.3.2 Aplicando patches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 2.3.3 Op c oes t ipicas do configure . . . . . . . . . . . . . . . . . . . 97 2.3.4 Instalando pela arvore de fontes do desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 2.3.5 Lidando com Problemas de Compila c ao . . . . . . . . 103 2.3.6 Notas MIT-pthreads . . . . . . . . . . . . . . . . . . . . . . . . . . 106 2.3.7 Instalando o MySQL a partir do Fonte no Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.3.7.1 Construindo o MySQL Usando VC++ . . 108

iv 2.3.7.2 Criando um Pacote Fonte do Windows a partir da Ultima Fonte de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 2.4 Congura c oes e Testes P os-instala c ao . . . . . . . . . . . . . . . . . . . 111 2.4.1 Problemas Executando o mysql_install_db . . . . 115 2.4.2 Problemas Inicializando o Servidor MySQL . . . . . 116 2.4.3 Inicializando e parando o MySQL automaticamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 2.5 Atualizando/Desatualizando o MySQL . . . . . . . . . . . . . . . . . . 120 2.5.1 Atualizando da Vers ao 4.0 para 4.1 . . . . . . . . . . . . 120 2.5.2 Atualizando da Vers ao 3.23 para 4.0 . . . . . . . . . . . 123 2.5.3 Atualizando da vers ao 3.22 para 3.23 . . . . . . . . . . . 126 2.5.4 Atualizando da vers ao 3.21 para 3.22 . . . . . . . . . . . 128 2.5.5 Atualizando da vers ao 3.20 para 3.21 . . . . . . . . . . . 129 2.5.6 Atualizando a Tabela de Permiss oes . . . . . . . . . . . . 130 2.5.7 Atualizando para outra arquitetura . . . . . . . . . . . . 130 2.5.8 Atualizando o MySQL no Windows . . . . . . . . . . . . 132 2.6 Notas espec icas para os Sistemas Operacionais . . . . . . . . . 132 2.6.1 Notas Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 2.6.1.1 Conectando em um MySQL Rematamente a Windows Utilizando SSH . . . . . . . . . . . . . . . 133 2.6.1.2 Distribuindo Dados Entre Diferentes Discos no Win32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 2.6.1.3 Compilando clientes MySQL no Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 2.6.1.4 MySQL para Windows Comparado com o MySQL para Unix . . . . . . . . . . . . . . . . . . . . . . . 134 2.6.2 Notas Linux (Todas as vers oes) . . . . . . . . . . . . . . . . 137 2.6.2.1 Notas Linux para distribui c oes bin arias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 2.6.2.2 Notas Linux x86 . . . . . . . . . . . . . . . . . . . . . 142 2.6.2.3 Notas Linux SPARC . . . . . . . . . . . . . . . . . 143 2.6.2.4 Notas Linux Alpha . . . . . . . . . . . . . . . . . . . 143 2.6.2.5 Notas Linux PowerPC . . . . . . . . . . . . . . . . 144 2.6.2.6 Notas Linux MIPS . . . . . . . . . . . . . . . . . . . 144 2.6.2.7 Notas Linux IA-64 . . . . . . . . . . . . . . . . . . . 144 2.6.3 Notas Solaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 2.6.3.1 Notas Solaris 2.7/2.8 . . . . . . . . . . . . . . . . . 147 2.6.3.2 Notas Solaris x86 . . . . . . . . . . . . . . . . . . . . 148 2.6.4 Notas BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 2.6.4.1 Notas FreeBSD . . . . . . . . . . . . . . . . . . . . . . 149 2.6.4.2 Notas NetBSD . . . . . . . . . . . . . . . . . . . . . . . 150 2.6.4.3 Notas OpenBSD . . . . . . . . . . . . . . . . . . . . . 150 2.6.4.4 Notas OpenBSD 2.8 . . . . . . . . . . . . . . . . . . 151 2.6.4.5 Notas BSDI Vers ao 2.x . . . . . . . . . . . . . . . 151 2.6.4.6 Notas BSD/OS Vers ao 3.x . . . . . . . . . . . . 151 2.6.4.7 Notas BSD/OS Vers ao 4.x . . . . . . . . . . . . 152 2.6.5 Notas Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

v 2.6.5.1 Mac OS X 10.x . . . . . . . . . . . . . . . . . . . . . . 152 2.6.5.2 Mac OS X Server 1.2 (Rhapsody) . . . . . 153 2.6.6 Notas de Outros Unix . . . . . . . . . . . . . . . . . . . . . . . . . 153 2.6.6.1 Notas HP-UX para distribui c oes bin arias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 2.6.6.2 Notas HP-UX Vers ao 10.20 . . . . . . . . . . . 154 2.6.6.3 Notas HP-UX Vers ao 11.x . . . . . . . . . . . . 154 2.6.6.4 Notas IBM-AIX . . . . . . . . . . . . . . . . . . . . . . 155 2.6.6.5 Notas SunOS 4 . . . . . . . . . . . . . . . . . . . . . . 157 2.6.6.6 Notas Alpha-DEC-UNIX (Tru64) . . . . . 157 2.6.6.7 Notas Alpha-DEC-OSF1 . . . . . . . . . . . . . . 159 2.6.6.8 Notas SGI Irix . . . . . . . . . . . . . . . . . . . . . . . 160 2.6.6.9 Notas SCO . . . . . . . . . . . . . . . . . . . . . . . . . . 161 2.6.6.10 Notas SCO Unixware Version 7.0 . . . . . 163 2.6.7 Notas OS/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 2.6.8 Notas Novell NetWare . . . . . . . . . . . . . . . . . . . . . . . . 164 2.6.9 Notas BeOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Coment arios de Instala c ao do Perl . . . . . . . . . . . . . . . . . . . . . . 165 2.7.1 Instalando Perl no Unix . . . . . . . . . . . . . . . . . . . . . . . 165 2.7.2 Instalaando ActiveState Perl no Windows . . . . . . 166 2.7.3 Problemas Usando a Interface Perl DBI/DBD . . . . 166

2.7

3

Tutorial de Introdu c ao Do MySQL . . . . . . . 1693.1 Conectando e Desconectando do Servidor . . . . . . . . . . . . . . . 169 3.2 Fazendo Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 3.3 Cria c ao e Utiliza c ao de um Banco de Dados . . . . . . . . . . . . . 173 3.3.1 Criando e Selecionando um Banco de Dados . . . . 174 3.3.2 Criando uma Tabela . . . . . . . . . . . . . . . . . . . . . . . . . . 175 3.3.3 Carregando dados em uma tabela . . . . . . . . . . . . . . 176 3.3.4 Recuperando Informa c oes de uma Tabela . . . . . . . 178 3.3.4.1 Selecionando Todos os Dados . . . . . . . . . 178 3.3.4.2 Selecionando Registros Espec icos . . . . . 179 3.3.4.3 Selecionando Colunas Especicas . . . . . . 180 3.3.4.4 Ordenando Registros . . . . . . . . . . . . . . . . . 181 3.3.4.5 C alculo de Datas . . . . . . . . . . . . . . . . . . . . . 183 3.3.4.6 Trabalhando com Valores Nulos (NULL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 3.3.4.7 Combina c ao de padr oes . . . . . . . . . . . . . . . 186 3.3.4.8 Contando Registros . . . . . . . . . . . . . . . . . . 189 3.3.4.9 Utilizando M ultiplas Tabelas . . . . . . . . . . 191 3.4 Obtendo Informa c oes Sobre Bancos de Dados e Tabelas . . 193 3.5 Utilizando mysql em Modo Batch . . . . . . . . . . . . . . . . . . . . . . 194 3.6 Exemplos de Consultas Comuns . . . . . . . . . . . . . . . . . . . . . . . . 196 3.6.1 O Valor M aximo para uma Coluna . . . . . . . . . . . . . 196 3.6.2 O Registro que Armazena o Valor M aximo para uma Coluna Determinada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 3.6.3 M aximo da Coluna por Grupo . . . . . . . . . . . . . . . . . 197

vi 3.6.4 As Linhas Armazenando o Group-wise M aximo de um Certo Campo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 3.6.5 Utilizando Vari aveis de Usu ario . . . . . . . . . . . . . . . . 199 3.6.6 Utilizando Chaves Estrangeiras . . . . . . . . . . . . . . . . 199 3.6.7 Pesquisando em Duas Chaves . . . . . . . . . . . . . . . . . . 201 3.6.8 Calculando Visitas Di arias . . . . . . . . . . . . . . . . . . . . 201 3.6.9 Usando AUTO_INCREMENT . . . . . . . . . . . . . . . . . . . . . . 202 3.7 Consultas de Projetos G emeos . . . . . . . . . . . . . . . . . . . . . . . . . 203 3.7.1 Encontrando Todos G emeos N ao-distribu idos . . . 204 3.7.2 Mostrando uma Tabela sobre a Situa c ao dos Pares G emeos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 3.8 Utilizando MySQL com Apache . . . . . . . . . . . . . . . . . . . . . . . . 207

4

Administra c ao do Bancos de Dados MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2084.1 Congurando o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 4.1.1 Op c oes de Linha de Comando do mysqld . . . . . . . 208 4.1.2 Arquivo de Op c oes my.cnf . . . . . . . . . . . . . . . . . . . 217 4.2 Executando M ultiplos MySQL Servers na Mesma M aquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 4.2.1 Executando M ultiplos Servidores no Windows . . 221 4.2.1.1 Iniciando M ultiplos Servidores na Linha de Comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 4.2.1.2 Iniciando M ultiplos Servidores Como Servi cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 4.2.2 Executando M ultiplos Servidores no Unix . . . . . . 225 4.2.3 Usando Programas Clientes em um Ambiente Multi-Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 4.3 Detalhes Gerais de Seguran ca e o Sistema de Privil egio de Acesso do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 4.3.1 Seguran ca Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 4.3.2 Como Tornar o MySQL Seguro contra Crackers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 4.3.3 Op c oes de Inicializa c ao para o mysqld em Rela c ao a Seguran ca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 4.3.4 Detalhes de Seguran ca com LOAD DATA LOCAL . . . 232 4.3.5 O Que o Sistema de Privil egios Faz . . . . . . . . . . . . 233 4.3.6 Como o Sistema de Privil egios Funciona . . . . . . . . 233 4.3.7 Privil egios Fornecidos pelo MySQL . . . . . . . . . . . . 237 4.3.8 Conectando ao Servidor MySQL . . . . . . . . . . . . . . . 239 4.3.9 Controle de Acesso, Est agio 1: Verica c ao da Conex ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 4.3.10 Controle de Acesso, Est agio 2: Verica c ao da Requisi c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 4.3.11 Hashing de Senhas no MySQL 4.1 . . . . . . . . . . . . 246 4.3.12 Causas dos Erros de Accesso Negado . . . . . . . . . 250 4.4 Gerenciamento das Contas dos Usu arios no MySQL . . . . . . 255 4.4.1 A Sintaxe de GRANT e REVOKE . . . . . . . . . . . . . . . . . . 255

vii 4.4.2 Nomes de Usu arios e Senhas do MySQL . . . . . . . . 260 4.4.3 Quando as Altera c oes nos Privil egios tem Efeito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 4.4.4 Congurando os Privil egios Iniciais do MySQL . . 261 4.4.5 Adicionando Novos Usu arios ao MySQL . . . . . . . . 262 4.4.6 Deletando Usu arios do MySQL . . . . . . . . . . . . . . . . 265 4.4.7 Limitando os Recursos dos Usu arios . . . . . . . . . . . . 266 4.4.8 Congurando Senhas . . . . . . . . . . . . . . . . . . . . . . . . . 267 4.4.9 Mantendo Sua Senha Segura . . . . . . . . . . . . . . . . . . 268 4.4.10 Usando Conex oes Seguras . . . . . . . . . . . . . . . . . . . . 269 4.4.10.1 Conceitos Basicos . . . . . . . . . . . . . . . . . . . 269 4.4.10.2 Exig encias . . . . . . . . . . . . . . . . . . . . . . . . . . 269 4.4.10.3 Congurando Certicados SSL para o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 4.4.10.4 Op c oes SSL do GRANT . . . . . . . . . . . . . . . 274 4.4.10.5 Op c oes SSL de Linha de Comando . . . 275 4.5 Preven c ao de Disastres e Recupera c ao . . . . . . . . . . . . . . . . . . 276 4.5.1 Backups dos Bancos de Dados . . . . . . . . . . . . . . . . . 276 4.5.2 Sintaxe de BACKUP TABLE . . . . . . . . . . . . . . . . . . . . . . 278 4.5.3 Sintaxe de RESTORE TABLE . . . . . . . . . . . . . . . . . . . . . 278 4.5.4 Sintaxe de CHECK TABLE . . . . . . . . . . . . . . . . . . . . . . . 279 4.5.5 Sintaxe do REPAIR TABLE . . . . . . . . . . . . . . . . . . . . . . 280 4.5.6 Utilizando myisamchk para Manuten c ao de Tabelas e Recupera c ao em Caso de Falhas . . . . . . . . . . . . . . . . . . 281 4.5.6.1 Sintaxe do myisamchk . . . . . . . . . . . . . . . . 282 4.5.6.2 Op c oes Gerais do myisamchk . . . . . . . . . . 283 4.5.6.3 Op c oes de Verica c ao do myisamchk . . . 284 4.5.6.4 Op c oes de Reparos do myisamchk . . . . . 285 4.5.6.5 Outras Op c oes do myisamchk . . . . . . . . . 287 4.5.6.6 Uso de Mem oria do myisamchk . . . . . . . . 287 4.5.6.7 Uso do myisamchk para Recupera c ao em Caso de Falhas . . . . . . . . . . . . . . . . . . . . . . . . . . 288 4.5.6.8 Como Vericar Erros em Tabelas . . . . . . 289 4.5.6.9 Como Reparar Tabelas . . . . . . . . . . . . . . . 290 4.5.6.10 Otimiza c ao de Tabelas . . . . . . . . . . . . . . 292 4.5.7 Congurando um Regime de Manuten c ao das Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 4.5.8 Obtendo Informa c oes sobre as Tabelas . . . . . . . . . 293 4.6 Adiministra c ao do Banco de Dados e Refer encia de Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 4.6.1 Sintaxe de OPTIMIZE TABLE . . . . . . . . . . . . . . . . . . . . 299 4.6.2 Sintaxe de ANALYZE TABLE . . . . . . . . . . . . . . . . . . . . . 299 4.6.3 Sintaxe de CHECKSUM TABLE . . . . . . . . . . . . . . . . . . . . 300 4.6.4 Sintaxe de FLUSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 4.6.5 Sintaxe de RESET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 4.6.6 Sintaxe de PURGE MASTER LOGS . . . . . . . . . . . . . . . . . 302 4.6.7 Sintaxe de KILL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 4.6.8 Sintaxe de SHOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

viii 4.6.8.1 Recuperando Informa c oes sobre Bancos de Dados, Tabelas, Colunas e Indices . . . . . . . . . 304 4.6.8.2 SHOW TABLE STATUS . . . . . . . . . . . . . . . . . . 305 4.6.8.3 SHOW STATUS . . . . . . . . . . . . . . . . . . . . . . . . . 306 4.6.8.4 SHOW VARIABLES . . . . . . . . . . . . . . . . . . . . . 309 4.6.8.5 SHOW [BDB] LOGS . . . . . . . . . . . . . . . . . . . . . 321 4.6.8.6 SHOW PROCESSLIST . . . . . . . . . . . . . . . . . . . 321 4.6.8.7 SHOW GRANTS . . . . . . . . . . . . . . . . . . . . . . . . . 323 4.6.8.8 SHOW CREATE TABLE . . . . . . . . . . . . . . . . . . 323 4.6.8.9 SHOW WARNINGS | ERRORS . . . . . . . . . . . . . 323 4.6.8.10 SHOW TABLE TYPES . . . . . . . . . . . . . . . . . . 325 4.6.8.11 SHOW PRIVILEGES . . . . . . . . . . . . . . . . . . . 326 4.7 Localiza c ao do MySQL e Utiliza c ao Internacional . . . . . . . . 326 4.7.1 O Conjunto de Caracteres Utilizado para Dados e Ordena c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 4.7.1.1 German character set . . . . . . . . . . . . . . . . 327 4.7.2 Mensagens de Erros em Outras L inguas . . . . . . . . 328 4.7.3 Adicionando um Novo Conjunto de Caracteres . . 328 4.7.4 Os Vetores de Deni c oes de Caracteres . . . . . . . . . 330 4.7.5 Suporte ` a Ordena c ao de Strings . . . . . . . . . . . . . . . 330 4.7.6 Suporte ` a Caracteres Multi-byte . . . . . . . . . . . . . . . 331 4.7.7 Problemas com Conjuntos de Caracteres . . . . . . . 331 4.8 Utilit arios e Scripts do Lado do Servidor MySQL . . . . . . . . 331 4.8.1 Vis ao Geral dos Scripts e Utilit arios do Lado Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 4.8.2 mysqld-safe, o wrapper do mysqld . . . . . . . . . . . . 332 4.8.3 mysqld_multi, programa para gerenciar m ultiplos servidores MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 4.8.4 myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL . . . . . . . . . . . . . . . . . . . . . 337 4.8.5 mysqld-max, om servidor mysqld extendido . . . . . 344 4.9 Utilit arios e Scripts do Lado do Cliente MySQL . . . . . . . . . 346 4.9.1 Vis ao Geral dos Utilit arios e Scripts do Lado do Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 4.9.2 mysql, A Ferramenta de Linha de Comando . . . . 347 4.9.3 mysqlcc, The MySQL Control Center . . . . . . . . . . 355 4.9.4 mysqladmin, Administrando um Servidor MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 4.9.5 mysqlbinlog, Executando as Consultas a Partir de um Log Bin ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 4.9.6 Usando mysqlcheck para Manuten c ao de Tabelas e Recupera c ao em Caso de Falhas . . . . . . . . . . . . . . . . . . 360 4.9.7 mysqldump, Descarregando a Estrutura de Tabelas e Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 4.9.8 mysqlhotcopy, Copiando Bancos de Dados e Tabelas do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 4.9.9 mysqlimport, Importando Dados de Arquivos Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

ix 4.9.10 mysqlshow, Exibindo Bancos de Dados, Tabelas e Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 4.9.11 mysql_config, Op c oes para compila c ao do cliente MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 4.9.12 perror, Explicando C odigos de Erros . . . . . . . . . 372 4.9.13 Como Executar Comandos SQL a Partir de um Arquivo Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 4.10 Os Arquivos de Log do MySQL . . . . . . . . . . . . . . . . . . . . . . . 372 4.10.1 O Log de Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 4.10.2 O Log de Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . 373 4.10.3 O Log de Atualiza c oes . . . . . . . . . . . . . . . . . . . . . . . 374 4.10.4 O Log Bin ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 4.10.5 O Log para Consultas Lentas . . . . . . . . . . . . . . . . . 378 4.10.6 Manuten c ao do Log de Arquivo . . . . . . . . . . . . . . . 378 4.11 Replica c ao no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 4.11.1 Introdu c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 4.11.2 Vis ao Geral da Implementa c ao da Replica c ao . . 380 4.11.3 Detalhes de Implementa c ao da Replica c ao . . . . . 381 4.11.4 Como Congurar a Replica c ao . . . . . . . . . . . . . . . . 386 4.11.5 Recursos de Replica c ao e Problemas Conhecidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 4.11.6 Op c oes de Inicializa c ao da Replica c ao . . . . . . . . . 392 4.11.7 Instru c oes SQL para Controle do Servidor Master . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 4.11.7.1 PURGE MASTER LOGS . . . . . . . . . . . . . . . . . 401 4.11.7.2 RESET MASTER . . . . . . . . . . . . . . . . . . . . . . 401 4.11.7.3 SET SQL_LOG_BIN . . . . . . . . . . . . . . . . . . . 401 4.11.7.4 SHOW BINLOG EVENTS . . . . . . . . . . . . . . . . 401 4.11.7.5 SHOW MASTER STATUS . . . . . . . . . . . . . . . . 402 4.11.7.6 SHOW MASTER LOGS . . . . . . . . . . . . . . . . . . 402 4.11.7.7 SHOW SLAVE HOSTS . . . . . . . . . . . . . . . . . . 402 4.11.8 Instru c oes SQL para Controle do Servidor Slave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 4.11.8.1 CHANGE MASTER TO . . . . . . . . . . . . . . . . . . 402 4.11.8.2 LOAD DATA FROM MASTER . . . . . . . . . . . . . 405 4.11.8.3 LOAD TABLE tbl_name FROM MASTER . . . 405 4.11.8.4 MASTER_POS_WAIT() . . . . . . . . . . . . . . . . 405 4.11.8.5 RESET SLAVE . . . . . . . . . . . . . . . . . . . . . . . . 406 4.11.8.6 SET GLOBAL SQL_SLAVE_SKIP_COUNTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 4.11.8.7 SHOW SLAVE STATUS . . . . . . . . . . . . . . . . . 406 4.11.8.8 START SLAVE . . . . . . . . . . . . . . . . . . . . . . . . 409 4.11.8.9 STOP SLAVE . . . . . . . . . . . . . . . . . . . . . . . . . 410 4.11.9 FAQ da Replica c ao . . . . . . . . . . . . . . . . . . . . . . . . . . 411 4.11.10 Problemas com Replica c ao . . . . . . . . . . . . . . . . . . 416 4.11.11 Relatando Problemas de Replica c ao . . . . . . . . . . 417

x

5

Otimiza c ao do MySQL . . . . . . . . . . . . . . . . . . . 4195.1 Vis ao Geral da Otimiza c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 5.1.1 Limita c oes do Projeto MySQL/Trocas . . . . . . . . . 419 5.1.2 Portabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 5.1.3 Para que Utilizamos o MySQL? . . . . . . . . . . . . . . . . 421 5.1.4 O Pacote de Benchmark do MySQL . . . . . . . . . . . . 422 5.1.5 Utilizando seus Pr oprios Benchmarks . . . . . . . . . . 423 Otimizando SELECTs e Outras Consultas . . . . . . . . . . . . . . . . 424 5.2.1 Sintaxe de EXPLAIN (Obter informa c oes sobre uma SELECT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 5.2.2 Estimando o Desempenho de uma Consulta . . . . . 432 5.2.3 Velocidade das Consultas que Utilizam SELECT . . 432 5.2.4 Como o MySQL Otimiza Cl ausulas WHERE . . . . . . 433 5.2.5 Como o MySQL Otimiza IS NULL . . . . . . . . . . . . . . 434 5.2.6 Como o MySQL Otimiza Cl ausulas DISTINCT . . . 435 5.2.7 Como o MySQL Otimiza LEFT JOIN e RIGHT JOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 5.2.8 Como o MySQL Otimiza Cl ausulas ORDER BY . . . 437 5.2.9 Como o MySQL Otimiza Cl ausulas LIMIT . . . . . . 438 5.2.10 Performance das Consultas que Utilizam INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 5.2.11 Performance das Consultas que Utilizam UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 5.2.12 Performance das Consultas que Utilizam DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 5.2.13 Mais Dicas sobre Otimiza c oes . . . . . . . . . . . . . . . . 441 Detalhes sobre Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 5.3.1 Como o MySQL Trava as Tabelas . . . . . . . . . . . . . . 444 5.3.2 Detalhes sobre Lock de Tabelas . . . . . . . . . . . . . . . . 445 Otimizando a Estrutura de Banco de Dados . . . . . . . . . . . . . 447 5.4.1 Op c oes do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 5.4.2 Deixando os Dados com o Menor Tamanho Poss ivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 5.4.3 Como o MySQL Utiliza Indices . . . . . . . . . . . . . . . . 448 5.4.4 Indices de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 5.4.5 Indices de M ultiplas Colunas . . . . . . . . . . . . . . . . . . 451 5.4.6 Como o MySQL Conta as Tabelas Abertas . . . . . 452 5.4.7 Como o MySQL Abre e Fecha as Tabelas . . . . . . . 452 5.4.8 Desvantagem em Criar um N umero Grande de Tabelas no Mesmo Banco de Dados . . . . . . . . . . . . . . 453 Otimizando o Servidor MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 454 5.5.1 Sintonia dos Par ametros em Tempo de Sistema/Compila c ao e na Inicializa c ao . . . . . . . . . . . . 454 5.5.2 Par ametros de Sintonia do Servidor . . . . . . . . . . . . 454 5.5.3 Como a Compila c ao e a Liga c ao Afetam a Velocidade do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 457 5.5.4 Como o MySQL Utiliza a Mem oria . . . . . . . . . . . . 458 5.5.5 Como o MySQL Utiliza o DNS . . . . . . . . . . . . . . . . 460

5.2

5.3

5.4

5.5

xi 5.6 5.5.6 Sintaxe de SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Detalhes de Disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 5.6.1 Utilizando Links Simb olicos . . . . . . . . . . . . . . . . . . . 466 5.6.1.1 Utilizando Links Simb olicos para Bancos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 5.6.1.2 Utilizando Links Simb olicos para Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

6

Refer encia de Linguagem do MySQL . . . . . . 4696.1 Estrutura da Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 6.1.1 Literais: Como Gravar Strings e Numerais . . . . . . 469 6.1.1.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 6.1.1.2 N umeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 6.1.1.3 Valores Hexadecimais . . . . . . . . . . . . . . . . 471 6.1.1.4 Valores NULL . . . . . . . . . . . . . . . . . . . . . . . . . 471 6.1.2 Nomes de Banco de dados, Tabela, Indice, Coluna e Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 6.1.3 Caso Sensitivo nos Nomes . . . . . . . . . . . . . . . . . . . . . 473 6.1.4 Vari aveis de Usu ario . . . . . . . . . . . . . . . . . . . . . . . . . . 474 6.1.5 Vari aveis de Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 475 6.1.6 Sintaxe de Coment arios . . . . . . . . . . . . . . . . . . . . . . . 478 6.1.7 Tratamento de Palavras Reservadas no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 6.2 Tipos de Campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 6.2.1 Tipos Num ericos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 6.2.2 Tipos de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . 489 6.2.2.1 Assuntos referentes ao ano 2000 (Y2K) e Tipos de Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 6.2.2.2 Os Tipos DATETIME, DATE e TIMESTAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 6.2.2.3 O Tipo TIME . . . . . . . . . . . . . . . . . . . . . . . . . 495 6.2.2.4 O Tipo YEAR . . . . . . . . . . . . . . . . . . . . . . . . . 496 6.2.3 Tipos String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 6.2.3.1 Os Tipos CHAR e VARCHAR . . . . . . . . . . . . . 497 6.2.3.2 Os Tipos BLOB e TEXT . . . . . . . . . . . . . . . . 497 6.2.3.3 O Tipo ENUM . . . . . . . . . . . . . . . . . . . . . . . . . 499 6.2.3.4 O Tipo SET . . . . . . . . . . . . . . . . . . . . . . . . . . 500 6.2.4 Escolhendo o Tipo Correto para uma Coluna . . . 501 6.2.5 Usando Tipos de Colunas de Outros Mecanismos de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 6.2.6 Exig encias de Armazenamento dos Tipos de Coluna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 6.3 Fun c oes para Uso em Cl ausulas SELECT e WHERE . . . . . . . . . 503 6.3.1 Operadores e Fun c oes de Tipos n ao Especicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 6.3.1.1 Parenteses . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 6.3.1.2 Operadores de Compara c ao . . . . . . . . . . . 504 6.3.1.3 Operadores Logicos . . . . . . . . . . . . . . . . . . 508

xii 6.3.1.4 Fun c oes de Fluxo de Controle . . . . . . . . . 510 6.3.2 Fun c oes String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 6.3.2.1 Fun c oes de Compara c ao de Strings . . . . 519 6.3.2.2 Caso Sensitivo . . . . . . . . . . . . . . . . . . . . . . . 522 6.3.3 Fun c oes Num ericas . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 6.3.3.1 Opera c oes Aritim eticas . . . . . . . . . . . . . . . 522 6.3.3.2 Fun c oes Matematicas . . . . . . . . . . . . . . . . . 523 6.3.4 Fun c oes de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . 529 6.3.5 Fun c oes de Convers ao . . . . . . . . . . . . . . . . . . . . . . . . . 543 6.3.6 Outras Fun c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 6.3.6.1 Fun c oes Bin arias . . . . . . . . . . . . . . . . . . . . . 545 6.3.6.2 Fun c oes Diversas . . . . . . . . . . . . . . . . . . . . . 546 6.3.7 Fun c oes e Modicadores para Usar com Cl ausulas GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 6.3.7.1 Fun c oes GROUP BY . . . . . . . . . . . . . . . . . . . . 555 6.3.7.2 Modicadores GROUP BY . . . . . . . . . . . . . . 558 6.3.7.3 GROUP BY com Campos Escondidos . . . . 561 6.4 Manipula c ao de Dados: SELECT, INSERT, UPDATE e DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 6.4.1 Sintaxe SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 6.4.1.1 Sintaxe JOIN . . . . . . . . . . . . . . . . . . . . . . . . 567 6.4.1.2 Sintaxe UNION . . . . . . . . . . . . . . . . . . . . . . . 569 6.4.2 Sintaxe de Subquery . . . . . . . . . . . . . . . . . . . . . . . . . . 569 6.4.2.1 A Subquery como um Operandop Escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 6.4.2.2 Compara c oes Usando Subquery . . . . . . . 571 6.4.2.3 Subqueries with ANY, IN, and SOME . . . . 571 6.4.2.4 Subqueries with ALL . . . . . . . . . . . . . . . . . . 572 6.4.2.5 Correlated Subqueries . . . . . . . . . . . . . . . . 572 6.4.2.6 EXISTS and NOT EXISTS . . . . . . . . . . . . . . 573 6.4.2.7 Row Subqueries . . . . . . . . . . . . . . . . . . . . . . 573 6.4.2.8 Subqueries in the FROM clause . . . . . . . . . 574 6.4.2.9 Subquery Errors . . . . . . . . . . . . . . . . . . . . . 575 6.4.2.10 Optimizing Subqueries . . . . . . . . . . . . . . 576 6.4.2.11 Rewriting Subqueries for Earlier MySQL Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 6.4.3 Sintaxe INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 6.4.3.1 Sintaxe INSERT ... SELECT . . . . . . . . . . . 581 6.4.3.2 Sintaxe INSERT DELAYED . . . . . . . . . . . . . . 581 6.4.4 Sintaxe UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 6.4.5 Sintaxe DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 6.4.6 Sintaxe TRUNCATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 6.4.7 Sintaxe REPLACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 6.4.8 Sintaxe LOAD DATA INFILE . . . . . . . . . . . . . . . . . . . . . 587 6.4.9 Sintaxe HANDLER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 6.4.10 Sintaxe DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 6.5 Deni c ao de Dados: CREATE, DROP e ALTER . . . . . . . . . . . . . . 596 6.5.1 Sintaxe CREATE DATABASE . . . . . . . . . . . . . . . . . . . . . 596

xiii 6.5.2 Sintaxe DROP DATABASE . . . . . . . . . . . . . . . . . . . . . . . 596 6.5.3 Sintaxe CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . 597 6.5.3.1 Altera c ao de Especica c oes de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 6.5.4 Sintaxe ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . 607 6.5.5 Sintaxe RENAME TABLE . . . . . . . . . . . . . . . . . . . . . . . . . 611 6.5.6 Sintaxe DROP TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 6.5.7 Sintaxe CREATE INDEX . . . . . . . . . . . . . . . . . . . . . . . . . 612 6.5.8 Sintaxe DROP INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 Comandos Utilit arios B asicos do Usu ario MySQL . . . . . . . . 613 6.6.1 Sintaxe USE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 6.6.2 Sintaxe DESCRIBE (Obtem Informa c oes Sobre Colunas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 Comandos Transacionais e de Lock do MySQL . . . . . . . . . . 614 6.7.1 Sintaxe de START TRANSACTION, COMMIT e ROLLBACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 6.7.2 Instru c oes que N ao Podem Ser Desfeitas . . . . . . . . 615 6.7.3 Instru c oes que Fazem um Commit Implicito . . . . 615 6.7.4 Sintaxe de SAVEPOINT e ROLLBACK TO SAVEPOINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 6.7.5 Sintaxe LOCK TABLES e UNLOCK TABLES . . . . . . . . . 616 6.7.6 Sintaxe SET TRANSACTION . . . . . . . . . . . . . . . . . . . . . 618 Pesquisa Full-text no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 618 6.8.1 Restri c oes Full-text . . . . . . . . . . . . . . . . . . . . . . . . . . . 622 6.8.2 Ajuste Fino de Pesquisas Full-text no MySQL . . 623 6.8.3 TODO de Pesquisas Full-text . . . . . . . . . . . . . . . . . . 624 Cache de Consultas do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 624 6.9.1 Como a Cache de Consultas Opera . . . . . . . . . . . . . 625 6.9.2 Congura c ao da Cache de Consultas . . . . . . . . . . . 626 6.9.3 Op c oes da Cache de Consultas na SELECT . . . . . . 627 6.9.4 Estado e Manuten c ao da Cache de Consultas . . . 627

6.6

6.7

6.8

6.9

7

Tipos de Tabela do MySQL . . . . . . . . . . . . . . 6297.1 Tabelas MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 7.1.1 Espa co Necess ario para Chaves . . . . . . . . . . . . . . . . 632 7.1.2 Formatos de Tabelas MyISAM . . . . . . . . . . . . . . . . . . 633 7.1.2.1 Caracter isticas de Tabelas Est aticas (Tamanho Fixo) . . . . . . . . . . . . . . . . . . . . . . . . . 633 7.1.2.2 Caracter isticas de Tabelas Din amicas . . 633 7.1.2.3 Caracteristicas de Tabelas Compactadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 7.1.3 Problemas com Tabelas MyISAM . . . . . . . . . . . . . . . . 635 7.1.3.1 Tabelas MyISAM Corrompidas . . . . . . . . . 635 7.1.3.2 O Cliente est a usando a tabela ou n ao a fechou de forma apropriada . . . . . . . . . . . . . . . 636 Tabelas MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636 7.2.1 Problemas com Tabelas MERGE . . . . . . . . . . . . . . . . . 639 Tabelas ISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640

7.2 7.3

xiv 7.4 7.5 Tabelas Tabelas 7.5.1 7.5.2 7.5.3 7.5.4 HEAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642 Vis ao Geral de Tabelas InnoDB . . . . . . . . . . . . . . . . 642 InnoDB no MySQL Vers ao 3.23 . . . . . . . . . . . . . . . . 642 Op c oes de Inicializa c ao do InnoDB . . . . . . . . . . . . . 643 Criando Tablespaces no InnoDB . . . . . . . . . . . . . . . 650 7.5.4.1 Se Alguma Coisa Der Errado Na Cria c ao Do Banco de Dados . . . . . . . . . . . . . . . . . . . . . . 651 7.5.5 Criando Tabelas InnoDB . . . . . . . . . . . . . . . . . . . . . . 651 7.5.5.1 Convertendo Tabelas MyISAM para InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652 7.5.5.2 Restri c oes FOREIGN KEY . . . . . . . . . . . . . . . 652 7.5.6 Adicionando e Removendo Arquivos de Dados e Log do InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 7.5.7 Fazendo Backup e Recuperando um Banco de Dados InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 7.5.7.1 For cando a recupera c ao . . . . . . . . . . . . . . 657 7.5.7.2 Ponto de Verica c ao . . . . . . . . . . . . . . . . . 658 7.5.8 Movendo um Banco de Dados InnoDB para Outra M aquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658 7.5.9 Modelo Transacional do InnoDB . . . . . . . . . . . . . . . 659 7.5.9.1 InnoDB e SET ... TRANSACTION ISOLATION LEVEL ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 7.5.9.2 Leitura Consistente sem Lock . . . . . . . . . 661 7.5.9.3 Lock de Leitura SELECT ... FOR UPDATE e SELECT ... LOCK IN SHARE MODE . . . . . . . . . . 661 7.5.9.4 Lock da Chave Seguinte: Evitando Problemas com Fantasmas . . . . . . . . . . . . . . . . 662 7.5.9.5 Locks Denidos por Diferentes Instru c oes SQL no InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . 662 7.5.9.6 Detec c ao de Deadlock e Rollback . . . . . . 663 7.5.9.7 Um Exemplo de Como a Leitura Consistente Funciona no InnoDB . . . . . . . . . . 664 7.5.9.8 Como lidar com deadlocks? . . . . . . . . . . . 665 7.5.10 Dicas de Ajuste de Desempenho . . . . . . . . . . . . . . 666 7.5.10.1 SHOW INNODB STATUS e o Monitor InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 7.5.11 Implementa c ao de Multi-versioning . . . . . . . . . . . 669 7.5.12 Estrutura de Tabelas e Indices . . . . . . . . . . . . . . . . 670 7.5.12.1 Estrutura F isica do Indice . . . . . . . . . . . 671 7.5.12.2 Buer de Inser c ao . . . . . . . . . . . . . . . . . . . 671 7.5.12.3 Indices Hash Adaptativos . . . . . . . . . . . . 672 7.5.12.4 Estrutura dos Registros F isicos . . . . . . 672 7.5.12.5 Como Funciona uma Coluna AUTO_INCREMENT no InnoDB . . . . . . . . . . . . . . 672 7.5.13 Gerenciamento do Espa co de Arquivos e E/S de Disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 7.5.13.1 E/S de Disco . . . . . . . . . . . . . . . . . . . . . . . 673

xv 7.5.13.2 Gerenciamento do Espa co de Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 7.5.13.3 Desfragmentando uma Tabela . . . . . . . . 675 7.5.14 Tratando Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 7.5.15 Restri c oes em Tabelas InnoDB . . . . . . . . . . . . . . . 675 7.5.16 Hist orico de Altera c oes 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 de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 7.5.16.8 MySQL/InnoDB-4.1.0, 03 de Abril de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 7.5.16.9 MySQL/InnoDB-3.23.56, 17 de Mar co de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 7.5.16.10 MySQL/InnoDB-4.0.12, 18 Mar co de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 7.5.16.11 MySQL/InnoDB-4.0.11, 25 de Fevereiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 7.5.16.12 MySQL/InnoDB-4.0.10, 04 de Fevereiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 7.5.16.13 MySQL/InnoDB-3.23.55, 24 de Janeiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 7.5.16.14 MySQL/InnoDB-4.0.9, 14 de Janeiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 7.5.16.15 MySQL/InnoDB-4.0.8, 07 de Janeiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 7.5.16.16 MySQL/InnoDB-4.0.7, 26 de Dezembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 7.5.16.17 MySQL/InnoDB-4.0.6, 19 de Dezembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 7.5.16.18 MySQL/InnoDB-3.23.54, 12 de Dezembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . 684 7.5.16.19 MySQL/InnoDB-4.0.5, 18 de Novembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684 7.5.16.20 MySQL/InnoDB-3.23.53, 09 de Outubro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685 7.5.16.21 MySQL/InnoDB-4.0.4, 02 de Outubro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

xvi 7.5.16.22 MySQL/InnoDB-4.0.3, 28 de Agosto de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 7.5.16.23 MySQL/InnoDB-3.23.52, 16 de Agosto de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 7.5.16.24 MySQL/InnoDB-4.0.2, 10 de Julho de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 7.5.16.25 MySQL/InnoDB-3.23.51, 12 de Junho de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 7.5.16.26 MySQL/InnoDB-3.23.50, 23 de Abril de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 7.5.16.27 MySQL/InnoDB-3.23.49, 17 de Fevereiro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 7.5.16.28 MySQL/InnoDB-3.23.48, 09 de Fevereiro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 7.5.16.29 MySQL/InnoDB-3.23.47, 28 de Dezembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 691 7.5.16.30 MySQL/InnoDB-4.0.1, 23 de Dezembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 7.5.16.31 MySQL/InnoDB-3.23.46, 30 de Novembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 692 7.5.16.32 MySQL/InnoDB-3.23.45, 23 de Novembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 692 7.5.16.33 MySQL/InnoDB-3.23.44, 02 de Novembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 693 7.5.16.34 MySQL/InnoDB-3.23.43, 04 de Outubro de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 7.5.16.35 MySQL/InnoDB-3.23.42, 09 de Setembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.36 MySQL/InnoDB-3.23.41, 13 de Agosto de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.37 MySQL/InnoDB-3.23.40, 16 de Julho de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.38 MySQL/InnoDB-3.23.39, 13 de Junho de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.39 MySQL/InnoDB-3.23.38, 12 de Maio de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.17 Informa c oes de Contato do InnoDB . . . . . . . . . . . . 694 Tabelas BDB ou BerkeleyDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 7.6.1 Vis ao Geral de Tabelas BDB . . . . . . . . . . . . . . . . . . . . 695 7.6.2 Instalando BDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 7.6.3 Op c oes de Inicializa c ao do BDB . . . . . . . . . . . . . . . . . 696 7.6.4 Caracter isticas de Tabelas BDB: . . . . . . . . . . . . . . . . 697 7.6.5 Itens a serem corrigidos no BDB num futuro pr oximo: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698 7.6.6 Sistemas operacionais suportados pelo BDB . . . . . . 698 7.6.7 Restri c oes em Tabelas BDB . . . . . . . . . . . . . . . . . . . . 699 7.6.8 Erros Que Podem Ocorrer Usando Tabelas BDB . . 699

7.6

xvii

8

Introdu c ao ao MaxDB . . . . . . . . . . . . . . . . . . . 7018.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 Historia do MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Licenciamento e Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conceitos B asicos do MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . Diferen cas de Recursos entre o MaxDB e o MySQL . . . . . . Interoperability Features between MaxDB and MySQL . . . MaxDB-related Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reserved Words in MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fun c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701 701 701 701 702 702 703 705 705

9

Conjunto de Caracteres Nacionais e Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707Conjuntos de Caracteres e Collations em Geral . . . . . . . . . . 707 Conjunto de Caracteres e Collations no MySQL . . . . . . . . . 708 Determinando o Conjunto de Caracteres e Collation Padr oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 9.3.1 Conjunto de Caracteres e Collations do Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 9.3.2 Conjunto de Caracteres e Collation de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709 9.3.3 O Conjunto de Caracteres e Collations de Tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710 9.3.4 Conjunto de Caracteres e Collation de Colunas . . 710 9.3.5 Exemplos de Atribui c oes de Conjuntos de Caracteres e Collation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711 9.3.6 Conjunto de Caracteres e Collation de Conex ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 9.3.7 Conjunto de Caracteres e Collation de Caracter de String Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 9.3.8 Cl ausula COLLATE em V arias Partes de uma Consulta SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714 9.3.9 Preced encia da Cl ausula COLLATE . . . . . . . . . . . . . . 714 9.3.10 Operador BINARY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 9.3.11 Alguns Casos Especiais Onde a Determina c ao da Collation e Trabalhosa . . . . . . . . . . . . . . . . . . . . . . . . . . 715 9.3.12 Collations Devem Ser para o Conjunto de Caracteres Certo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 9.3.13 Um exemplo do Efeito da Collation . . . . . . . . . . . 716 9.4 Opera c oes Afetadas pelo Suporte a Conjunto de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 9.4.1 Strings de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 717 9.4.2 CONVERT() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717 9.4.3 CAST() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717 9.4.4 SHOW CHARACTER SET . . . . . . . . . . . . . . . . . . . . . . . . . . 718 9.4.5 SHOW COLLATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 9.4.6 SHOW CREATE DATABASE . . . . . . . . . . . . . . . . . . . . . . . . 719 9.4.7 SHOW FULL COLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . . 719 9.1 9.2 9.3

xviii 9.5 Suporte Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719 9.6 UTF8 para Metdados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720 9.7 Compatibilidade com Outros SGBDs . . . . . . . . . . . . . . . . . . . 721 9.8 Novo Formato do Arquivo de Congura c ao do Conjunto de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721 9.9 Conjunto de Caracteres Nacional . . . . . . . . . . . . . . . . . . . . . . . 721 9.10 Atualizando para o MySQL 4.0 . . . . . . . . . . . . . . . . . . . . . . . . 722 9.10.1 Conjunto de Caracteres do MySQL e o Par/Conjunto de Caracter/Collation Correspondente do MySQL 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 9.11 Os conjuntos de Caracteres e Collations que o MySQL Suporta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 9.11.1 O Conjunto de Caracteres Unicode . . . . . . . . . . . . 725 9.11.2 Conjunto de Caracteres para Plataformas Espec icas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 9.11.3 Conjunto de Caracteres do Sul da Europa e Oriente M edio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 9.11.4 Os Conjuntos de Caracteres Asi aticos . . . . . . . . . 725 9.11.5 Os Conjuntos de Caracteres B alticos . . . . . . . . . . 726 9.11.6 Os Conjuntos de Caracteres Cir ilicos . . . . . . . . . . 726 9.11.7 O Conjunto de Caracteres da Europa Central . . 727 9.11.8 Os Conjuntos de Caracteres da Europa Ocidental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728

10

Extens oes Espacias em MySQL . . . . . . . . . . 73010.1 Introdu c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 O Modelo Geom atrico OpenGIS . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 A Hierarquia da Classe Geometry . . . . . . . . . . . . . 10.2.2 Classe Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.3 Classe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.4 Classe Curve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.5 Classe LineString . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.6 Classe Surface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.7 Classe Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.8 Classe GeometryCollection . . . . . . . . . . . . . . . . . 10.2.9 Classe MultiPoint . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.10 Classe MultiCurve . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.11 Classe MultiLineString (Multi Linhas) . . . . . 10.2.12 Classe MultiSurface (Multi Superf icies) . . . . . 10.2.13 Classe MultiPolygon (Multi Poligonos) . . . . . . 10.3 Formatos de Dados Espaciais Suportados . . . . . . . . . . . . . . 10.3.1 Formato Well-Known Text (WKT) . . . . . . . . . . . . 10.3.2 Formato Well-Known Binary (WKB) . . . . . . . . . . 10.4 Criando um Banco de Dados MySQL Habilitado Espacialmente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.1 Tipos de Dados Espaciais do MySQL . . . . . . . . . 10.4.2 Criando Valores Espaciais . . . . . . . . . . . . . . . . . . . . 730 730 731 732 733 733 734 734 734 735 735 735 736 736 736 737 737 738 738 739 739

xix 10.4.2.1 Criando Valores Geometry Usando Fun c oes WKT . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 10.4.2.2 Criando Valores Geometry Usando Fun c oes WKB . . . . . . . . . . . . . . . . . . . . . . . . . . . 740 10.4.2.3 Criando uma Valor de Geometira Usando Fun c oes Espec icas do MySQL . . . . . . . . . . . 741 10.4.3 Criando Colunas Espaciais . . . . . . . . . . . . . . . . . . . 742 10.4.4 Entrando com Dados em Colunas Espaciais . . . . 743 10.4.5 Buscando Dados Espaciais . . . . . . . . . . . . . . . . . . . 744 10.4.5.1 Buscando Dados Espaciais em um Formato Interno . . . . . . . . . . . . . . . . . . . . . . . . . 744 10.4.5.2 Buscando Dados Espaciais no Formato WKT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 10.4.5.3 Buscando Dados Espaciais no Formato WKB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 10.5 Analisando Informa c ao Espacial . . . . . . . . . . . . . . . . . . . . . . . 744 10.5.1 Fun c oes Para Converter Geometrias Entre Formatos Diferentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 10.5.2 Fun c oes de An alise das Propriedades de Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 10.5.2.1 Fun c oes de An alise das Propriedades de Geometry em Geral . . . . . . . . . . . . . . . . . . . . . . 746 10.5.2.2 Fun c oes de An alise das Propriedades de Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747 10.5.2.3 Fun c oes de An alise das Propriedades de LineString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 10.5.2.4 Fun c oes de An alise das Propriedades de MultiLineString . . . . . . . . . . . . . . . . . . . . . . . . 749 10.5.2.5 Fun c oes de An alise das Propriedades de Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750 10.5.2.6 Fun c oes de An alise das Propriedades de MultiPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 10.5.2.7 Fun c oes de An alise das Propriedades de GeometryCollection . . . . . . . . . . . . . . . . . . . . 751 10.5.3 Fun c oes Que Criam Novas Geometrias de Outras Existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 10.5.3.1 Fun c oes de Geometria Que Produzem Novas Geometrias . . . . . . . . . . . . . . . . . . . . . . . . 752 10.5.3.2 Operadores Espaciais . . . . . . . . . . . . . . . . 752 10.5.4 Fun c oes Para Testar Rela c oes Espaciais Entre Objetos Geom etricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 10.5.5 Rela c oes de Ret angulo de Limite M inimo (Minimal Bounding Rectangles - MBR) em Geometrias . . . . . 753 10.5.6 Fun c oes que Testam Relacionamentos Espaciais Entre Geometrias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 10.6 Otimizando An alises Espaciais . . . . . . . . . . . . . . . . . . . . . . . . 755 10.6.1 Criando Indices Espaciais . . . . . . . . . . . . . . . . . . . . 755 10.6.2 Usando Indice Espacial . . . . . . . . . . . . . . . . . . . . . . 756

xx 10.7 Compatibilidade e Conformidade com o MySQL . . . . . . . . 758 10.7.1 Recursos GIS Que Ainda N ao Est ao Implementados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758

11

Stored Procedures e Fun c oes . . . . . . . . . . . . 76011.1 Sintaxe de Stored Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . 760 11.1.1 Maintaining Stored Procedures . . . . . . . . . . . . . . . 761 11.1.1.1 CREATE PROCEDURE and CREATE FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761 11.1.1.2 ALTER PROCEDURE and ALTER FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 11.1.1.3 DROP PROCEDURE and DROP FUNCTION . . 763 11.1.1.4 SHOW CREATE PROCEDURE and SHOW CREATE FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 11.1.2 SHOW PROCEDURE STATUS and SHOW FUNCTION STATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 11.1.3 CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 11.1.4 BEGIN ... END Compound Statement . . . . . . . . . 764 11.1.5 DECLARE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 764 11.1.6 Variables in Stored Procedures . . . . . . . . . . . . . . . 764 11.1.6.1 DECLARE Local Variables . . . . . . . . . . . . . 765 11.1.6.2 Variable SET Statement . . . . . . . . . . . . . . 765 11.1.6.3 SELECT ... INTO Statement . . . . . . . . . 765 11.1.7 Conditions and Handlers . . . . . . . . . . . . . . . . . . . . . 765 11.1.7.1 DECLARE Conditions . . . . . . . . . . . . . . . . . 765 11.1.7.2 DECLARE Handlers . . . . . . . . . . . . . . . . . . . 765 11.1.8 Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 11.1.8.1 Declaring Cursors . . . . . . . . . . . . . . . . . . . 768 11.1.8.2 Cursor OPEN Statement . . . . . . . . . . . . . . 768 11.1.8.3 Cursor FETCH Statement . . . . . . . . . . . . . 768 11.1.8.4 Cursor CLOSE Statement . . . . . . . . . . . . . 768 11.1.9 Flow Control Constructs . . . . . . . . . . . . . . . . . . . . . 768 11.1.9.1 IF Statement . . . . . . . . . . . . . . . . . . . . . . . 768 11.1.9.2 CASE Statement . . . . . . . . . . . . . . . . . . . . . 768 11.1.9.3 LOOP Statement . . . . . . . . . . . . . . . . . . . . . 769 11.1.9.4 LEAVE Statement . . . . . . . . . . . . . . . . . . . . 769 11.1.9.5 ITERATE Statement . . . . . . . . . . . . . . . . . 769 11.1.9.6 REPEAT Statement . . . . . . . . . . . . . . . . . . . 770 11.1.9.7 WHILE Statement . . . . . . . . . . . . . . . . . . . . 770

xxi

12

Ferramentas de Clientes e APIs do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77212.1 API C do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1 Tipos de Dados da API C . . . . . . . . . . . . . . . . . . . . 12.1.2 Vis ao Geral das Fun c ao da API C . . . . . . . . . . . . 12.1.3 Descri c ao das Fun c oes da API C . . . . . . . . . . . . . . 12.1.3.1 mysql_affected_rows() . . . . . . . . . . . . 12.1.3.2 mysql_change_user() . . . . . . . . . . . . . . 12.1.3.3 mysql_character_set_name() . . . . . . . 12.1.3.4 mysql_close() . . . . . . . . . . . . . . . . . . . . . 12.1.3.5 mysql_connect() . . . . . . . . . . . . . . . . . . . 12.1.3.6 mysql_create_db() . . . . . . . . . . . . . . . . 12.1.3.7 mysql_data_seek() . . . . . . . . . . . . . . . . 12.1.3.8 mysql_debug() . . . . . . . . . . . . . . . . . . . . . 12.1.3.9 mysql_drop_db() . . . . . . . . . . . . . . . . . . . 12.1.3.10 mysql_dump_debug_info() . . . . . . . . . 12.1.3.11 mysql_eof() . . . . . . . . . . . . . . . . . . . . . . 12.1.3.12 mysql_errno() . . . . . . . . . . . . . . . . . . . . 12.1.3.13 mysql_error() . . . . . . . . . . . . . . . . . . . . 12.1.3.14 mysql_escape_string() . . . . . . . . . . . 12.1.3.15 mysql_fetch_field() . . . . . . . . . . . . . 12.1.3.16 mysql_fetch_fields() . . . . . . . . . . . . 12.1.3.17 mysql_fetch_field_direct() . . . . . 12.1.3.18 mysql_fetch_lengths() . . . . . . . . . . . 12.1.3.19 mysql_fetch_row() . . . . . . . . . . . . . . . 12.1.3.20 mysql_field_count() . . . . . . . . . . . . . 12.1.3.21 mysql_field_seek() . . . . . . . . . . . . . . 12.1.3.22 mysql_field_tell() . . . . . . . . . . . . . . 12.1.3.23 mysql_free_result() . . . . . . . . . . . . . 12.1.3.24 mysql_get_client_info() . . . . . . . . . 12.1.3.25 mysql_get_host_info() . . . . . . . . . . . 12.1.3.26 mysql_get_proto_info() . . . . . . . . . . 12.1.3.27 mysql_get_server_info() . . . . . . . . . 12.1.3.28 mysql_get_server_version() . . . . . 12.1.3.29 mysql_info() . . . . . . . . . . . . . . . . . . . . . 12.1.3.30 mysql_init() . . . . . . . . . . . . . . . . . . . . . 12.1.3.31 mysql_insert_id() . . . . . . . . . . . . . . . 12.1.3.32 mysql_kill() . . . . . . . . . . . . . . . . . . . . . 12.1.3.33 mysql_list_dbs() . . . . . . . . . . . . . . . . . 12.1.3.34 mysql_list_fields() . . . . . . . . . . . . . 12.1.3.35 mysql_list_processes() . . . . . . . . . . 12.1.3.36 mysql_list_tables() . . . . . . . . . . . . . 12.1.3.37 mysql_num_fields() . . . . . . . . . . . . . . 12.1.3.38 mysql_num_rows() . . . . . . . . . . . . . . . . . 12.1.3.39 mysql_options() . . . . . . . . . . . . . . . . . . 12.1.3.40 mysql_ping() . . . . . . . . . . . . . . . . . . . . . 12.1.3.41 mysql_query() . . . . . . . . . . . . . . . . . . . . 12.1.3.42 mysql_real_connect() . . . . . . . . . . . . 772 772 775 779 780 781 782 782 783 783 784 785 785 786 786 788 788 789 789 790 791 792 792 794 795 795 796 796 796 797 797 798 798 799 799 800 801 801 802 802 803 805 805 807 808 809

xxii 12.1.3.43 mysql_real_escape_string() . . . . . 811 12.1.3.44 mysql_real_query() . . . . . . . . . . . . . . 813 12.1.3.45 mysql_reload() . . . . . . . . . . . . . . . . . . . 813 12.1.3.46 mysql_row_seek() . . . . . . . . . . . . . . . . . 814 12.1.3.47 mysql_row_tell() . . . . . . . . . . . . . . . . . 814 12.1.3.48 mysql_select_db() . . . . . . . . . . . . . . . 815 12.1.3.49 mysql_set_server_option() . . . . . . . 815 12.1.3.50 mysql_shutdown() . . . . . . . . . . . . . . . . . 816 12.1.3.51 mysql_sqlstate() . . . . . . . . . . . . . . . . . 817 12.1.3.52 mysql_ssl_set() . . . . . . . . . . . . . . . . . . 817 12.1.3.53 mysql_stat() . . . . . . . . . . . . . . . . . . . . . 818 12.1.3.54 mysql_store_result() . . . . . . . . . . . . 818 12.1.3.55 mysql_thread_id() . . . . . . . . . . . . . . . 820 12.1.3.56 mysql_use_result() . . . . . . . . . . . . . . 820 12.1.3.57 mysql_commit() . . . . . . . . . . . . . . . . . . . 821 12.1.3.58 mysql_rollback() . . . . . . . . . . . . . . . . . 822 12.1.3.59 mysql_autocommit() . . . . . . . . . . . . . . 822 12.1.3.60 mysql_more_results() . . . . . . . . . . . . 822 12.1.3.61 mysql_next_result() . . . . . . . . . . . . . 823 12.1.4 Instru c oes Preparadas da API C . . . . . . . . . . . . . . 824 12.1.5 Tipos de Dados de Instru c oes Preparadas da API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824 12.1.6 Vis ao Geral das Fun c oes de Instru c oes Preparadas da API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827 12.1.7 Descri c ao das Fun c oes de Instru c ao Preparada da API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829 12.1.7.1 mysql_prepare() . . . . . . . . . . . . . . . . . . . 829 12.1.7.2 mysql_param_count() . . . . . . . . . . . . . . 831 12.1.7.3 mysql_get_metadata() . . . . . . . . . . . . . 831 12.1.7.4 mysql_bind_param() . . . . . . . . . . . . . . . 832 12.1.7.5 mysql_execute() . . . . . . . . . . . . . . . . . . . 833 12.1.7.6 mysql_stmt_affected_rows() . . . . . . . 837 12.1.7.7 mysql_bind_result() . . . . . . . . . . . . . . 838 12.1.7.8 mysql_stmt_store_result() . . . . . . . . 839 12.1.7.9 mysql_stmt_data_seek() . . . . . . . . . . . 840 12.1.7.10 mysql_stmt_row_seek() . . . . . . . . . . . 840 12.1.7.11 mysql_stmt_row_tell() . . . . . . . . . . . 841 12.1.7.12 mysql_stmt_num_rows() . . . . . . . . . . . 841 12.1.7.13 mysql_fetch() . . . . . . . . . . . . . . . . . . . . 842 12.1.7.14 mysql_send_long_data() . . . . . . . . . . 847 12.1.7.15 mysql_stmt_close() . . . . . . . . . . . . . . 849 12.1.7.16 mysql_stmt_errno() . . . . . . . . . . . . . . 850 12.1.7.17 mysql_stmt_error() . . . . . . . . . . . . . . 850 12.1.7.18 mysql_stmt_sqlstate() . . . . . . . . . . . 851 12.1.8 Tratando a Execu c ao de M ultiplas Consultas na API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851 12.1.9 Manipulando Valores de Data e Hora na API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852

xxiii 12.1.10 Descri c ao das Fun c oes de Threads da API C . . 854 12.1.10.1 my_init() . . . . . . . . . . . . . . . . . . . . . . . . 854 12.1.10.2 mysql_thread_init() . . . . . . . . . . . . . 854 12.1.10.3 mysql_thread_end() . . . . . . . . . . . . . . 854 12.1.10.4 mysql_thread_safe() . . . . . . . . . . . . . 855 12.1.11 Descri c ao das Fun c oes do Servidor Embutido da API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855 12.1.11.1 mysql_server_init() . . . . . . . . . . . . . 855 12.1.11.2 mysql_server_end() . . . . . . . . . . . . . . 856 12.1.12 D uvidas e problemas comuns ao utilzar a API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857 12.1.12.1 Porque Algumas Vezes mysql_store_result() Retorna NULL Ap os mysql_query() Returnar com Sucesso? . . . . 857 12.1.12.2 Que Resultados Posso Onbetr de uma Consulta? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857 12.1.12.3 Como Posso Obter a ID Unica para a Ultima Linha Inserida? . . . . . . . . . . . . . . . . . . . 857 12.1.12.4 Problemas com Liga c ao na API C . . . 858 12.1.13 Construindo Programas Clientes . . . . . . . . . . . . . 858 12.1.14 Como Fazer um Cliente em Threads . . . . . . . . . 859 12.1.15 libmysqld, a Biblioteca do Servidor Embutido MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860 12.1.15.1 Vis ao Geral da Biblioteca do Servidor MySQL Embutido . . . . . . . . . . . . . . . . . . . . . . . 860 12.1.15.2 Compilando Programas com libmysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861 12.1.15.3 Restri c oes no Uso de um Servidor MySQL Embutido . . . . . . . . . . . . . . . . . . . . . . . 861 12.1.15.4 Usando Arquivo de Op c oes com o Servidor Embutido . . . . . . . . . . . . . . . . . . . . . . . 861 12.1.15.5 Itens a Fazer no Servidor Embutido (TODO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862 12.1.15.6 Um Exemplo Simples de Servidor Embutido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862 12.1.15.7 Licensiando o Servidor Embutido . . . 866 12.2 Suporte ODBC ao MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866 12.2.1 Como Instalar o MyODBC . . . . . . . . . . . . . . . . . . . 866 12.2.2 Como Preencher os V arios Campos no Programa de Administra c ao do ODBC . . . . . . . . . . . . . . . . . . . . . . . . 867 12.2.3 Par ametros de Conex ao do MyODBC . . . . . . . . . 868 12.2.4 Como Relatar Problemas com o MyODBC . . . . 869 12.2.5 Programas que Funcionam com MyODBC . . . . . 870 12.2.6 Como Obter o Valor de uma Coluna AUTO_INCREMENT no ODBC . . . . . . . . . . . . . . . . . . . . . . 874 12.2.7 Relatando Problemas com MyODBC . . . . . . . . . . 875 12.3 Conectividade Java (JDBC) ao MySQL . . . . . . . . . . . . . . . . 876 12.4 API PHP do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876

xxiv 12.4.1 Problemas Comuns com MySQL e PHP . . . . . . . 12.5 API Perl do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.1 DBI com DBD::mysql . . . . . . . . . . . . . . . . . . . . . . . . 12.5.2 A interface DBI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.3 Mais Informa c oes DBI/DBD . . . . . . . . . . . . . . . . . . . 12.6 API C++ do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6.1 Borland C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7 API Python do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8 API Tcl do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9 Eiel Wrapper do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876 876 877 877 883 883 883 884 884 884

13 14

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

Estendendo o MySQL . . . . . . . . . . . . . . . . . . . 89214.1 MySQL Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 14.1.1 Threads MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 14.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 do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 14.2 Adicionando Novas Fun c oes ao MySQL . . . . . . . . . . . . . . . . 895 14.2.1 Sintaxe CREATE FUNCTION/DROP FUNCTION . . . . . 896 14.2.2 Adicionando Novas Fun c oes Denidas Por Usu ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 14.2.2.1 Sequ encia de Chamadas UDF para Fun c oes Simples . . . . . . . . . . . . . . . . . . . . . . . . . 898 14.2.2.2 Sequ encia de Chamadas UDF para Fun c oes Agregadas . . . . . . . . . . . . . . . . . . . . . . . 899 14.2.2.3 Processando Argumentos . . . . . . . . . . . . 900 14.2.2.4 Valor de Retorno e Tartamento de Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902 14.2.2.5 Compilando e Instalando Fun c oes Denidas Por Usu ario . . . . . . . . . . . . . . . . . . . . 902 14.2.3 Adicionando uma Nova Fun c ao Nativa . . . . . . . . 904 14.3 Adicionado Novos Procedimentos ao MySQL . . . . . . . . . . . 905 14.3.1 An alise de Procedimento . . . . . . . . . . . . . . . . . . . . . 905 14.3.2 Escrevendo um Procedimento . . . . . . . . . . . . . . . . . 906

xxv

Ap endice A Problemas e Erros Comuns . . . . . 907A.1 A.2 Como Determinar o Que Est a Causando Problemas . . . . . 907 Erros Comuns Usando o MySQL . . . . . . . . . . . . . . . . . . . . . . . 908 A.2.1 Erro: Access Denied . . . . . . . . . . . . . . . . . . . . . . . . . 908 A.2.2 Erro: MySQL server has gone away . . . . . . . . . . . . 908 A.2.3 Erro: Cant connect to [local] MySQL server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909 A.2.4 Erro: Client does not support authentication protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911 A.2.5 Erro: Host ... is blocked . . . . . . . . . . . . . . . . . 912 A.2.6 Erro: Too many connections . . . . . . . . . . . . . . . . . 912 A.2.7 Erro: Some non-transactional changed tables couldnt be rolled back . . . . . . . . . . . . . . . . . . . . . . . 912 A.2.8 Erro: Out of memory . . . . . . . . . . . . . . . . . . . . . . . . . 913 A.2.9 Erro: Packet too large . . . . . . . . . . . . . . . . . . . . . . 913 A.2.10 Erros de Comunica c ao / Comunica c ao Abortada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914 A.2.11 Erro: The table is full . . . . . . . . . . . . . . . . . . . . 915 A.2.12 Erro: Cant create/write to file . . . . . . . . . . 915 A.2.13 Erro no Cliente: Commands out of sync . . . . . . . 916 A.2.14 Erro: Ignoring user . . . . . . . . . . . . . . . . . . . . . . . . 916 A.2.15 Erro: Table xxx doesnt exist . . . . . . . . . . . 916 A.2.16 Erro: Cant initialize character set xxx . . 917 A.2.17 Arquivo N ao Encontrado . . . . . . . . . . . . . . . . . . . . 917 A.3 Assuntos Relacionados a Instala c ao . . . . . . . . . . . . . . . . . . . . 918 A.3.1 Problemas de Liga c ao com a Biblioteca do Cliente MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918 A.3.2 Como Executar o MySQL Como Um Usu ario Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919 A.3.3 Problemas com Permiss oes de Arquivos . . . . . . . . 920 A.4 Assuntos Relacionados a Administra c ao . . . . . . . . . . . . . . . . 920 A.4.1 O Que Fazer Se o MySQL Continua Falhando . . 921 A.4.2 Como Recuperar uma Senha de Root Esquecida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923 A.4.3 Como o MySQL Trata de Discos Sem Espa co . . 924 A.4.4 Onde o MySQL Armazena Arquivos Tempor arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924 A.4.5 Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File /tmp/mysql.sock . . . . . . . 925 A.4.6 Problemas Com Fuso Hor ario . . . . . . . . . . . . . . . . . 926 A.5 Assuntos Relacionados a Consultas . . . . . . . . . . . . . . . . . . . . . 926 A.5.1 Caso-Sensitivito em Pesquisas . . . . . . . . . . . . . . . . . 926 A.5.2 Problemas Usando Colunas DATE . . . . . . . . . . . . . . 926 A.5.3 Problemas com Valores NULL . . . . . . . . . . . . . . . . . . 928 A.5.4 Problemas com alias . . . . . . . . . . . . . . . . . . . . . . . . 929 A.5.5 Deletando Linhas de Tabelas Relacionadas . . . . . 929 A.5.6 Resolvendo Problemas Com Registros N ao Encontrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930

xxvi A.5.7 Problemas com Compara c ao de Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930 Assuntos Relacionados ao Otimizador . . . . . . . . . . . . . . . . . . 932 A.6.1 Camo evitar o varredura da tabela,,, . . . . . . . . . . . 933 Assuntos Relacionados a Deni c oes de Tabelas . . . . . . . . . . 933 A.7.1 Problemas com ALTER TABLE. . . . . . . . . . . . . . . . . . 933 A.7.2 Como Alterar a Ordem das Colunas em Uma Tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934 A.7.3 Problemas com TEMPORARY TABLE . . . . . . . . 934

A.6 A.7

Ap endice B Colaboradores do MySQL . . . . . . 936B.1 B.2 B.3 B.4 B.5 B.6 B.7 Desenvolvedores do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . Coolaboradores do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . Respons aveis pela Documenta c ao e Tradu c ao . . . . . . . . . . . Bibliotecas usadas e incluidas com o MySQL . . . . . . . . . . . . Pacotes que suportam o MySQL . . . . . . . . . . . . . . . . . . . . . . . Ferramentas que s ao usadas para criar o MySQL . . . . . . . . Respons aveis pelo Suporte do MySQL . . . . . . . . . . . . . . . . . . 936 939 943 944 945 946 946

Ap endice C Hist orico de Altera co es do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948C.1 C.2 Altera c oes na distribui c ao 5.0.0 (Development) . . . . . . . . . . 948 Altera c oes na distribui c ao 4.1.x (Alpha) . . . . . . . . . . . . . . . . 948 C.2.1 Altera c oes na distribui c ao 4.1.2 (not released yet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949 C.2.2 Altera c oes na distribui c ao 4.1.1 (01 de Dez de 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950 C.2.3 Altera c oes na distribui c ao 4.1.0 (03 Apr 2003: Alpha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954 C.3 Altera c oes na distribui c ao 4.0.x (Production) . . . . . . . . . . . 956 C.3.1 Altera c oes na distribui c ao 4.0.17 (not released yet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957 C.3.2 Altera c oes na distribui c ao 4.0.16 (17 Out 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959 C.3.3 Altera c oes na distribui c ao 4.0.15 (03 Sep 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961 C.3.4 Altera c oes na distribui c ao 4.0.14 (18 Jul 2003) . . 965 C.3.5 Altera c oes na distribui c ao 4.0.13 (16 May 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969 C.3.6 Altera c oes na distribui c ao 4.0.12 (15 Mar 2003: Production) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972 C.3.7 Altera c oes na distribui c ao 4.0.11 (20 Feb 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 C.3.8 Altera c oes na distribui c ao 4.0.10 (29 Jan 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975 C.3.9 Altera c oes na distribui c ao 4.0.9 (09 Jan 2003) . . 976

xxvii C.3.10 Altera c oes na distribui c ao 4.0.8 (07 Jan 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977 C.3.11 Altera c oes na distribui c ao 4.0.7 (20 Dec 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977 C.3.12 Altera c oes na distribui c ao 4.0.6 (14 Dec 2002: Gamma) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978 C.3.13 Altera c oes na distribui c ao 4.0.5 (13 Nov 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979 C.3.14 Altera c oes na distribui c ao 4.0.4 (29 Sep 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 C.3.15 Altera c oes na distribui c ao 4.0.3 (26 Aug 2002: Beta) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983 C.3.16 Altera c oes na distribui c ao 4.0.2 (01 Jul 2002) . . 985 C.3.17 Altera c oes na distribui c ao 4.0.1 (23 Dec 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988 C.3.18 Altera c oes na distribui c ao 4.0.0 (Oct 2001: Alpha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 C.4 Altera c oes na distribui c ao 3.23.x (Recent; still supported) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 C.4.1 Altera c oes na distribui c ao 3.23.59 (not released yet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 C.4.2 Altera c oes na distribui c ao 3.23.58 (11 Sep 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992 C.4.3 Altera c oes na distribui c ao 3.23.57 (06 Jun 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992 C.4.4 Altera c oes na distribui c ao 3.23.56 (13 Mar 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993 C.4.5 Altera c oes na distribui c ao 3.23.55 (23 Jan 2003) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994 C.4.6 Altera c oes na distribui c ao 3.23.54 (05 Dec 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995 C.4.7 Altera c oes na distribui c ao 3.23.53 (09 Oct 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996 C.4.8 Altera c oes na distribui c ao 3.23.52 (14 Aug 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 C.4.9 Altera c oes na distribui c ao 3.23.51 (31 May 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 C.4.10 Altera c oes na distribui c ao 3.23.50 (21 Apr 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998 C.4.11 Altera c oes na distribui c ao 3.23.49 . . . . . . . . . . . . 999 C.4.12 Altera c oes na distribui c ao 3.23.48 (07 Feb 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999 C.4.13 Altera c oes na distribui c ao 3.23.47 (27 Dec 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 C.4.14 Altera c oes na distribui c ao 3.23.46 (29 Nov 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 C.4.15 Altera c oes na distribui c ao 3.23.45 (22 Nov 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001

xxviii C.4.16 Altera c oes na distribui c ao 3.23.44 (31 Oct 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001 C.4.17 Altera c oes na distribui c ao 3.23.43 (04 Oct 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002 C.4.18 Altera c oes na distribui c ao 3.23.42 (08 Sep 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003 C.4.19 Altera c oes na distribui c ao 3.23.41 (11 Aug 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004 C.4.20 Altera c oes na distribui c ao 3.23.40 . . . . . . . . . . . 1004 C.4.21 Altera c oes na distribui c ao 3.23.39 (12 Jun 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005 C.4.22 Altera c oes na distribui c ao 3.23.38 (09 May 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005 C.4.23 Altera c oes na distribui c ao 3.23.37 (17 Apr 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 C.4.24 Altera c oes na distribui c ao 3.23.36 (27 Mar 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007 C.4.25 Altera c oes na distribui c ao 3.23.35 (15 Mar 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007 C.4.26 Altera c oes na distribui c ao 3.23.34a . . . . . . . . . . 1008 C.4.27 Altera c oes na distribui c ao 3.23.34 (10 Mar 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008 C.4.28 Altera c oes na distribui c ao 3.23.33 (09 Feb 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009 C.4.29 Altera c oes na distribui c ao 3.23.32 (22 Jan 2001: Production) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010 C.4.30 Altera c oes na distribui c ao 3.23.31 (17 Jan 2001) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010 C.4.31 Altera c oes na distribui c ao 3.23.30 (04 Jan 2001) . . . . . . . . . . . . . . . . . . . . . .