• Nenhum resultado encontrado

refman-4.1-pt.a4

N/A
N/A
Protected

Academic year: 2021

Share "refman-4.1-pt.a4"

Copied!
861
0
0

Texto

(1)
(2)

Manual is in English, and this translation is not necessarily as up to date as the English version.

Copyright © 1997-2006 MySQL AB

Resumo

Document generated on: 2010-03-14 (revisão: 242)

This manual is NOT distributed under a GPL style license. Use of the manual is subject to the following terms:

• Conversion to other formats is allowed, but the actual content may not be altered or edited in any way. • You may create a printed copy for your own personal use.

• For all other uses, such as selling printed copies or using the manual in whole or in part within another publication, prior written agreement from MySQL AB is required.

(3)
(4)

Preface ... xv

1. Informações Gerais ...1

1.1. Sobre Este Manual ...1

1.1.1. Convenções Usadas Neste Manual ...2

1.2. Visão Geral do Sistema de Gerenciamento de Banco de Dados MySQL ...3

1.2.1. História do MySQL ...4

1.2.2. As Principais Características do MySQL ...4

1.2.3. Estabilidade do MySQL ...6

1.2.4. Qual o Tamanho Que as Tabelas do MySQL Podem Ter? ...7

1.2.5. Compatibilidade Com o Ano 2000 (Y2K) ...8

1.3. Visão Geral da MySQL AB ...9

1.3.1. O Modelo de Negócio e Serviços da MySQL AB ... 10

1.3.2. Informações para Contato ... 11

1.4. Suporte e Licenciamento do MySQL ... 12

1.4.1. Suporte Oferecido pela MySQL AB ... 12

1.4.2. Copyrights e Licenças Usadas pelo MySQL ... 12

1.4.3. Licenças do MySQL ... 13

1.4.4. Logomarcas e Marcas Registradas da MySQL AB ... 14

1.5. Mapa de Desenvolvimento do MySQL ... 15

1.5.1. MySQL 4.0 in a Nutshell ... 15

1.5.2. MySQL 4.1 in a Nutshell ... 17

1.5.3. MySQL 5.0, A Próxima Distribuição de Desenvolvimento ... 18

1.6. MySQL e o Futuro (o TODO) ... 18

1.6.1. Novos Recursos Planejados Para a Versão 4.1 ... 18

1.6.2. Novos Recursos Planejados Para a Versão 5.0 ... 19

1.6.3. Novos Recursos Planejados Para a Versão 5.1 ... 19

1.6.4. Novos Recursos Planejados Para a Versão em um Futuro Próximo ... 20

1.6.5. Novos Recursos Planejados Para a Versão em um Futuro a Médio Prazo ... 22

1.6.6. Novos Recursos que Não Planejamos Fazer ... 23

1.7. Fontes de Informações do MySQL ... 23

1.7.1. Listas de Discussão MySQL ... 23

1.7.2. Suporte a Comunidade MySQL Atrvés do IRC (Internet Relay Chat) ... 29

1.8. Qual compatibilidade aos padrões o MySQL oferece ? ... 29

1.8.1. Qual Padrão o MySQL Segue? ... 30

1.8.2. Executando o MySQL no modo ANSI ... 30

1.8.3. Extensões do MySQL para o Padrão SQL-92 ... 31

1.8.4. Diferenças do MySQL em Comparação com o SQL-92 ... 33

1.8.5. Como o MySQL Lida com Restrições ... 37

1.8.6. Erros Conhecidos e Deficiências de Projetos no MySQL ... 38

2. Instalação do MySQL ... 43

2.1. Instalação rápida padrão do MySQL ... 43

2.1.1. Instalando o MySQL no Windows ... 43

2.1.2. Instalando o MySQL no Linux ... 50

2.1.3. Instalando o MySQL no Mac OS X ... 51

2.1.4. Instalando o MySQL no NetWare ... 53

2.2. Detalhes Gerais de Instalação ... 54

2.2.1. Como obter o MySQL ... 54

2.2.2. Verificando a Integridade do Pacote UsandoMD5 ChecksumsouGnuPG ... 54

2.2.3. Sistemas Operacionais suportados pelo MySQL ... 56

2.2.4. Qual versão do MySQL deve ser usada ... 57

2.2.5. Layouts de Instalação ... 59

2.2.6. Como e quando as atualizações são lançadas? ... 60

2.2.7. Filosofia das Distribuições - Nenhum Bug Conhecidos nas Distribuições ... 61

2.2.8. Binários MySQL compilados pela MySQL AB ... 61

2.2.9. Instalando uma Distribuição Binária do MySQL ... 65

2.3. Instalando uma distribuição com fontes do MySQL ... 67

2.3.1. Visão geral da instalação rápida ... 68

2.3.2. Aplicando patches ... 69

2.3.3. Opções típicas doconfigure ... 70

2.3.4. Instalando pela árvore de fontes do desenvolvimento ... 72

2.3.5. Lidando com Problemas de Compilação ... 74

2.3.6. Notas MIT-pthreads ... 76

2.3.7. Instalando o MySQL a partir do Fonte no Windows ... 77

(5)

2.4.1. Problemas Executando omysql_install_db... 83

2.4.2. Problemas Inicializando o Servidor MySQL ... 84

2.4.3. Inicializando e parando o MySQL automaticamente. ... 85

2.5. Atualizando/Desatualizando o MySQL ... 86

2.5.1. Atualizando da Versão 4.0 para 4.1 ... 87

2.5.2. Atualizando da Versão 3.23 para 4.0 ... 89

2.5.3. Atualizando da versão 3.22 para 3.23 ... 91

2.5.4. Atualizando da versão 3.21 para 3.22 ... 92

2.5.5. Atualizando da versão 3.20 para 3.21 ... 93

2.5.6. Atualizando a Tabela de Permissões ... 93

2.5.7. Atualizando para outra arquitetura ... 94

2.5.8. Atualizando o MySQL no Windows ... 95

2.6. Notas específicas para os Sistemas Operacionais ... 95

2.6.1. Notas Windows ... 96

2.6.2. Notas Linux (Todas as versões) ... 98

2.6.3. Notas Solaris ...103

2.6.4. Notas BSD ...107

2.6.5. Notas Mac OS X ...109

2.6.6. Notas de Outros Unix ...110

2.6.7. Notas OS/2 ...117

2.6.8. Notas Novell NetWare ...118

2.6.9. Notas BeOS ...118

2.7. Comentários de Instalação do Perl ...118

2.7.1. Instalando Perl no Unix ...118

2.7.2. Instalaando ActiveState Perl no Windows ...119

2.7.3. Problemas Usando a Interface PerlDBI/DBD ...119

3. Tutorial de Introdução Do MySQL ...122

3.1. Conectando e Desconectando do Servidor ...122

3.2. Fazendo Consultas ...122

3.3. Criação e Utilização de um Banco de Dados ...125

3.3.1. Criando e Selecionando um Banco de Dados ...126

3.3.2. Criando uma Tabela ...126

3.3.3. Carregando dados em uma tabela ...127

3.3.4. Recuperando Informações de uma Tabela ...128

3.4. Obtendo Informações Sobre Bancos de Dados e Tabelas ...138

3.5. Utilizandomysqlem Modo Batch ...139

3.6. Exemplos de Consultas Comuns ...140

3.6.1. O Valor Máximo para uma Coluna ...140

3.6.2. O Registro que Armazena o Valor Máximo para uma Coluna Determinada ...140

3.6.3. Máximo da Coluna por Grupo ...141

3.6.4. As Linhas Armazenando o Group-wise Máximo de um Certo Campo ...141

3.6.5. Utilizando Variáveis de Usuário ...142

3.6.6. Utilizando Chaves Estrangeiras ...142

3.6.7. Pesquisando em Duas Chaves ...143

3.6.8. Calculando Visitas Diárias ...143

3.6.9. UsandoAUTO_INCREMENT ...144

3.7. Consultas de Projetos Gêmeos ...145

3.7.1. Encontrando Todos Gêmeos Não-distribuídos ...145

3.7.2. Mostrando uma Tabela sobre a Situação dos Pares Gêmeos ...146

3.8. Utilizando MySQL com Apache ...147

4. Administração do Bancos de Dados MySQL ...148

4.1. Configurando o MySQL ...148

4.1.1. Opções de Linha de Comando domysqld...148

4.1.2. Arquivo de Opçõesmy.cnf ...154

4.2. Executando Múltiplos MySQL Servers na Mesma Máquina ...157

4.2.1. Executando Múltiplos Servidores no Windows ...158

4.2.2. Executando Múltiplos Servidores no Unix ...160

4.2.3. Usando Programas Clientes em um Ambiente Multi-Servidor ...161

4.3. Detalhes Gerais de Segurança e o Sistema de Privilégio de Acesso do MySQL ...162

4.3.1. Segurança Geral ...162

4.3.2. Como Tornar o MySQL Seguro contra Crackers ...164

4.3.3. Opções de Inicialização para omysqldem Relação a Segurança. ...165

4.3.4. Detalhes de Segurança comLOAD DATA LOCAL ...165

4.3.5. O Que o Sistema de Privilégios Faz ...166

4.3.6. Como o Sistema de Privilégios Funciona ...166

4.3.7. Privilégios Fornecidos pelo MySQL ...169

4.3.8. Conectando ao Servidor MySQL ...170

4.3.9. Controle de Acesso, Estágio 1: Verificação da Conexão ...171

4.3.10. Controle de Acesso, Estágio 2: Verificação da Requisição ...173

(6)

4.3.12. Causas dos Erros deAccesso Negado...178

4.4. Gerenciamento das Contas dos Usuários no MySQL ...181

4.4.1. A Sintaxe deGRANTeREVOKE ...181

4.4.2. Nomes de Usuários e Senhas do MySQL ...185

4.4.3. Quando as Alterações nos Privilégios tem Efeito ...185

4.4.4. Configurando os Privilégios Iniciais do MySQL ...186

4.4.5. Adicionando Novos Usuários ao MySQL ...187

4.4.6. Deletando Usuários do MySQL ...189

4.4.7. Limitando os Recursos dos Usuários ...189

4.4.8. Configurando Senhas ...190

4.4.9. Mantendo Sua Senha Segura ...190

4.4.10. Usando Conexões Seguras ...191

4.5. Prevenção de Disastres e Recuperação ...195

4.5.1. Backups dos Bancos de Dados ...195

4.5.2. Sintaxe deBACKUP TABLE ...197

4.5.3. Sintaxe deRESTORE TABLE...197

4.5.4. Sintaxe deCHECK TABLE ...197

4.5.5. Sintaxe doREPAIR TABLE ...199

4.5.6. Utilizandomyisamchkpara Manutenção de Tabelas e Recuperação em Caso de Falhas ...199

4.5.7. Configurando um Regime de Manutenção das Tabelas ...208

4.5.8. Obtendo Informações sobre as Tabelas ...208

4.6. Adiministração do Banco de Dados e Referência de Linguagem ...212

4.6.1. Sintaxe deOPTIMIZE TABLE...212

4.6.2. Sintaxe deANALYZE TABLE...212

4.6.3. Sintaxe deCHECKSUM TABLE...213

4.6.4. Sintaxe deFLUSH...213

4.6.5. Sintaxe deRESET...214

4.6.6. Sintaxe dePURGE MASTER LOGS ...214

4.6.7. Sintaxe deKILL...214

4.6.8. Sintaxe deSHOW...215

4.7. Localização do MySQL e Utilização Internacional ...230

4.7.1. O Conjunto de Caracteres Utilizado para Dados e Ordenação ...230

4.7.2. Mensagens de Erros em Outras Línguas ...231

4.7.3. Adicionando um Novo Conjunto de Caracteres ...231

4.7.4. Os Vetores de Definições de Caracteres ...233

4.7.5. Suporte à Ordenação de Strings ...233

4.7.6. Suporte à Caracteres Multi-byte ...233

4.7.7. Problemas com Conjuntos de Caracteres ...233

4.8. Utilitários e Scripts do Lado do Servidor MySQL ...234

4.8.1. Visão Geral dos Scripts e Utilitários do Lado Servidor ...234

4.8.2.mysqld-safe, o wrapper domysqld...234

4.8.3.mysqld_multi, programa para gerenciar múltiplos servidores MySQL ...236

4.8.4.myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL ...238

4.8.5.mysqld-max, om servidormysqldextendido ...243

4.9. Utilitários e Scripts do Lado do Cliente MySQL ...244

4.9.1. Visão Geral dos Utilitários e Scripts do Lado do Cliente ...244

4.9.2.mysql, A Ferramenta de Linha de Comando ...245

4.9.3.mysqlcc, The MySQL Control Center ...252

4.9.4.mysqladmin, Administrando um Servidor MySQL ...254

4.9.5.mysqlbinlog, Executando as Consultas a Partir de um Log Binário ...256

4.9.6. Usandomysqlcheckpara Manutenção de Tabelas e Recuperação em Caso de Falhas ...256

4.9.7.mysqldump, Descarregando a Estrutura de Tabelas e Dados ...259

4.9.8.mysqlhotcopy, Copiando Bancos de Dados e Tabelas do MySQL ...262

4.9.9.mysqlimport, Importando Dados de Arquivos Texto ...264

4.9.10.mysqlshow, Exibindo Bancos de Dados, Tabelas e Colunas ...265

4.9.11.mysql_config, Opções para compilação do cliente MySQL ...266

4.9.12.perror, Explicando Códigos de Erros ...267

4.9.13. Como Executar Comandos SQL a Partir de um Arquivo Texto ...267

4.10. Os Arquivos de Log do MySQL ...267

4.10.1. O Log de Erros ...268

4.10.2. O Log de Consultas ...268

4.10.3. O Log de Atualizações ...268

4.10.4. O Log Binário ...269

4.10.5. O Log para Consultas Lentas ...271

4.10.6. Manutenção do Log de Arquivo ...271

4.11. Replicação no MySQL ...272

4.11.1. Introdução ...272

4.11.2. Visão Geral da Implementação da Replicação ...272

4.11.3. Detalhes de Implementação da Replicação ...273

(7)

4.11.5. Recursos de Replicação e Problemas Conhecidos ...279

4.11.6. Opções de Inicialização da Replicação ...281

4.11.7. Instruções SQL para Controle do Servidor Master ...287

4.11.8. Instruções SQL para Controle do Servidor Slave ...288

4.11.9. FAQ da Replicação ...294

4.11.10. Problemas com Replicação ...298

4.11.11. Relatando Problemas de Replicação ...299

5. Otimização do MySQL ...300

5.1. Visão Geral da Otimização ...300

5.1.1. Limitações do Projeto MySQL/Trocas ...300

5.1.2. Portabilidade ...300

5.1.3. Para que Utilizamos o MySQL? ...301

5.1.4. O Pacote de Benchmark do MySQL ...302

5.1.5. Utilizando seus Próprios Benchmarks ...303

5.2. OtimizandoSELECTs e Outras Consultas ...303

5.2.1. Sintaxe deEXPLAIN(Obter informações sobre umaSELECT) ...304

5.2.2. Estimando o Desempenho de uma Consulta ...309

5.2.3. Velocidade das Consultas que UtilizamSELECT ...310

5.2.4. Como o MySQL Otimiza CláusulasWHERE ...310

5.2.5. Como o MySQL OtimizaIS NULL ...311

5.2.6. Como o MySQL Otimiza CláusulasDISTINCT ...312

5.2.7. Como o MySQL OtimizaLEFT JOINeRIGHT JOIN ...312

5.2.8. Como o MySQL Otimiza CláusulasORDER BY ...313

5.2.9. Como o MySQL Otimiza CláusulasLIMIT ...314

5.2.10. Performance das Consultas que UtilizamINSERT ...314

5.2.11. Performance das Consultas que UtilizamUPDATE ...316

5.2.12. Performance das Consultas que UtilizamDELETE ...316

5.2.13. Mais Dicas sobre Otimizações ...316

5.3. Detalhes sobre Locks ...318

5.3.1. Como o MySQL Trava as Tabelas ...318

5.3.2. Detalhes sobre Lock de Tabelas ...319

5.4. Otimizando a Estrutura de Banco de Dados ...320

5.4.1. Opções do Projeto ...320

5.4.2. Deixando os Dados com o Menor Tamanho Possível ...320

5.4.3. Como o MySQL Utiliza Índices ...321

5.4.4. Índices de Colunas ...323

5.4.5. Índices de Múltiplas Colunas ...323

5.4.6. Como o MySQL Conta as Tabelas Abertas ...324

5.4.7. Como o MySQL Abre e Fecha as Tabelas ...324

5.4.8. Desvantagem em Criar um Número Grande de Tabelas no Mesmo Banco de Dados ...325

5.5. Otimizando o Servidor MySQL ...325

5.5.1. Sintonia dos Parâmetros em Tempo de Sistema/Compilação e na Inicialização ...325

5.5.2. Parâmetros de Sintonia do Servidor ...325

5.5.3. Como a Compilação e a Ligação Afetam a Velocidade do MySQL ...327

5.5.4. Como o MySQL Utiliza a Memória ...328

5.5.5. Como o MySQL Utiliza o DNS ...329

5.5.6. Sintaxe deSET...329

5.6. Detalhes de Disco ...333

5.6.1. Utilizando Links Simbólicos ...333

6. Referência de Linguagem do MySQL ...336

6.1. Estrutura da Linguagem ...336

6.1.1. Literais: Como Gravar Strings e Numerais ...336

6.1.2. Nomes de Banco de dados, Tabela, Índice, Coluna e Alias ...338

6.1.3. Caso Sensitivo nos Nomes ...339

6.1.4. Variáveis de Usuário ...340

6.1.5. Variáveis de Sistema ...341

6.1.6. Sintaxe de Comentários ...343

6.1.7. Tratamento de Palavras Reservadas no MySQL ...344

6.2. Tipos de Campos ...346

6.2.1. Tipos Numéricos ...350

6.2.2. Tipos de Data e Hora ...351

6.2.3. Tipos String ...356

6.2.4. Escolhendo o Tipo Correto para uma Coluna ...360

6.2.5. Usando Tipos de Colunas de Outros Mecanismos de Banco de Dados ...360

6.2.6. Exigências de Armazenamento dos Tipos de Coluna ...360

6.3. Funções para Uso em CláusulasSELECTeWHERE...362

6.3.1. Operadores e Funções de Tipos não Especificados ...362

6.3.2. Funções String ...368

6.3.3. Funções Numéricas ...377

(8)

6.3.5. Funções de Conversão ...396

6.3.6. Outras Funções ...398

6.3.7. Funções e Modificadores para Usar com CláusulasGROUP BY ...406

6.4. Manipulação de Dados:SELECT,INSERT,UPDATEeDELETE ...411

6.4.1. SintaxeSELECT...411 6.4.2. Sintaxe de Subquery ...416 6.4.3. SintaxeINSERT...423 6.4.4. SintaxeUPDATE...427 6.4.5. SintaxeDELETE...428 6.4.6. SintaxeTRUNCATE ...429 6.4.7. SintaxeREPLACE...429

6.4.8. SintaxeLOAD DATA INFILE...430

6.4.9. SintaxeHANDLER...435

6.4.10. SintaxeDO ...436

6.5. Definição de Dados:CREATE,DROPeALTER ...436

6.5.1. SintaxeCREATE DATABASE...436

6.5.2. SintaxeDROP DATABASE ...437

6.5.3. SintaxeCREATE TABLE...437

6.5.4. SintaxeALTER TABLE...444

6.5.5. SintaxeRENAME TABLE...446

6.5.6. SintaxeDROP TABLE...447

6.5.7. SintaxeCREATE INDEX...447

6.5.8. SintaxeDROP INDEX...448

6.6. Comandos Utilitários Básicos do Usuário MySQL ...448

6.6.1. SintaxeUSE ...448

6.6.2. SintaxeDESCRIBE(Obtem Informações Sobre Colunas) ...448

6.7. Comandos Transacionais e de Lock do MySQL ...448

6.7.1. Sintaxe deSTART TRANSACTION,COMMITeROLLBACK...448

6.7.2. Instruções que Não Podem Ser Desfeitas ...449

6.7.3. Instruções que Fazem um Commit Implicito ...449

6.7.4. Sintaxe deSAVEPOINTeROLLBACK TO SAVEPOINT ...449

6.7.5. SintaxeLOCK TABLESeUNLOCK TABLES ...450

6.7.6. SintaxeSET TRANSACTION...451

6.8. Pesquisa Full-text no MySQL ...452

6.8.1. Restrições Full-text ...454

6.8.2. Ajuste Fino de Pesquisas Full-text no MySQL ...455

6.8.3. TODO de Pesquisas Full-text ...455

6.9. Cache de Consultas do MySQL ...456

6.9.1. Como a Cache de Consultas Opera ...456

6.9.2. Configuração da Cache de Consultas ...457

6.9.3. Opções da Cache de Consultas naSELECT ...458

6.9.4. Estado e Manutenção da Cache de Consultas ...458

7. Tipos de Tabela do MySQL ...460

7.1. TabelasMyISAM...460

7.1.1. Espaço Necessário para Chaves ...462

7.1.2. Formatos de TabelasMyISAM...462

7.1.3. Problemas com TabelasMyISAM ...464

7.2. TabelasMERGE ...465

7.2.1. Problemas com TabelasMERGE ...467

7.3. TabelasISAM ...468

7.4. TabelasHEAP ...468

7.5. TabelasInnoDB...469

7.5.1. Visão Geral de Tabelas InnoDB ...469

7.5.2. InnoDB no MySQL Versão 3.23 ...470

7.5.3. Opções de Inicialização do InnoDB ...470

7.5.4. Criando Tablespaces no InnoDB ...474

7.5.5. Criando Tabelas InnoDB ...475

7.5.6. Adicionando e Removendo Arquivos de Dados e Log do InnoDB ...478

7.5.7. Fazendo Backup e Recuperando um Banco de Dados InnoDB ...479

7.5.8. Movendo um Banco de Dados InnoDB para Outra Máquina ...480

7.5.9. Modelo Transacional do InnoDB ...481

7.5.10. Dicas de Ajuste de Desempenho ...485

7.5.11. Implementação de Multi-versioning ...488

7.5.12. Estrutura de Tabelas e Índices ...488

7.5.13. Gerenciamento do Espaço de Arquivos e E/S de Disco ...490

7.5.14. Tratando Erros ...491

7.5.15. Restrições em Tabelas InnoDB ...491

7.5.16. Histórico de Alterações do InnoDB ...492

7.5.17. Informações de Contato doInnoDB...505

(9)

7.6.1. Visão Geral de TabelasBDB ...505

7.6.2. InstalandoBDB...506

7.6.3. Opções de Inicialização doBDB...506

7.6.4. Características de TabelasBDB: ...506

7.6.5. Itens a serem corrigidos noBDBnum futuro próximo: ...507

7.6.6. Sistemas operacionais suportados peloBDB ...508

7.6.7. Restrições em TabelasBDB ...508

7.6.8. Erros Que Podem Ocorrer Usando TabelasBDB...508

8. Introdução ao MaxDB ...510

8.1. Historia do MaxDB ...510

8.2. Licenciamento e Suporte ...510

8.3. Conceitos Básicos do MaxDB ...510

8.4. Diferenças de Recursos entre o MaxDB e o MySQL ...510

8.5. Interoperability Features between MaxDB and MySQL ...511

8.6. Links Relacionados ao MaxDB ...511

8.7. Palavras Reservadas no MaxDB ...511

9. Conjunto de Caracteres Nacionais e Unicode ...514

9.1. Conjuntos de Caracteres e Collations em Geral ...514

9.2. Conjunto de Caracteres e Collations no MySQL ...514

9.3. Determinando o Conjunto de Caracteres e Collation Padrões ...515

9.3.1. Conjunto de Caracteres e Collations do Servidor ...515

9.3.2. Conjunto de Caracteres e Collation de Banco de Dados ...515

9.3.3. O Conjunto de Caracteres e Collations de Tabela ...516

9.3.4. Conjunto de Caracteres e Collation de Colunas ...516

9.3.5. Exemplos de Atribuições de Conjuntos de Caracteres e Collation ...517

9.3.6. Conjunto de Caracteres e Collation de Conexão ...517

9.3.7. Conjunto de Caracteres e Collation de Caracter de String Literal ...518

9.3.8. CláusulaCOLLATEem Várias Partes de uma Consulta SQL ...519

9.3.9. Precedência da CláusulaCOLLATE...519

9.3.10. OperadorBINARY...520

9.3.11. Alguns Casos Especiais Onde a Determinação da Collation e Trabalhosa ...520

9.3.12. Collations Devem Ser para o Conjunto de Caracteres Certo ...520

9.3.13. Um exemplo do Efeito da Collation ...521

9.4. Operações Afetadas pelo Suporte a Conjunto de Caracteres ...521

9.4.1. Strings de Resultados ...521

9.4.2.CONVERT() ...522

9.4.3.CAST() ...522

9.4.4.SHOW CHARACTER SET...522

9.4.5.SHOW COLLATION ...522

9.4.6.SHOW CREATE DATABASE ...523

9.4.7.SHOW FULL COLUMNS...523

9.5. Suporte Unicode ...523

9.6. UTF8 para Metdados ...524

9.7. Compatibilidade com Outros SGBDs ...524

9.8. Novo Formato do Arquivo de Configuração do Conjunto de Caracteres ...524

9.9. Conjunto de Caracteres Nacional ...524

9.10. Atualizando para o MySQL 4.0 ...525

9.10.1. Conjunto de Caracteres do MySQL e o Par/Conjunto de Caracter/Collation Correspondente do MySQL 4.1 ...525

9.11. Os conjuntos de Caracteres e Collations que o MySQL Suporta ...526

9.11.1. O Conjunto de Caracteres Unicode ...527

9.11.2. Conjunto de Caracteres para Plataformas Específicas ...527

9.11.3. Conjunto de Caracteres do Sul da Europa e Oriente Médio ...527

9.11.4. Os Conjuntos de Caracteres Asiáticos ...527

9.11.5. Os Conjuntos de Caracteres Bálticos ...527

9.11.6. Os Conjuntos de Caracteres Cirílicos ...528

9.11.7. O Conjunto de Caracteres da Europa Central ...528

9.11.8. Os Conjuntos de Caracteres da Europa Ocidental ...529

10. Extensões Espacias em MySQL ...531

10.1. Introdução ...531

10.2. O Modelo Geomátrico OpenGIS ...531

10.2.1. A Hierarquia da ClasseGeometry...532

10.2.2. ClasseGeometry...532 10.2.3. ClassePoint ...533 10.2.4. ClasseCurve ...534 10.2.5. ClasseLineString ...534 10.2.6. ClasseSurface...534 10.2.7. ClassePolygon...534 10.2.8. ClasseGeometryCollection...535 10.2.9. ClasseMultiPoint ...535

(10)

10.2.10. ClasseMultiCurve...535

10.2.11. ClasseMultiLineString(Multi Linhas) ...536

10.2.12. ClasseMultiSurface(Multi Superfícies) ...536

10.2.13. ClasseMultiPolygon(Multi Polígonos) ...536

10.3. Formatos de Dados Espaciais Suportados ...537

10.3.1. Formato Well-Known Text (WKT) ...537

10.3.2. Formato Well-Known Binary (WKB) ...537

10.4. Criando um Banco de Dados MySQL Habilitado Espacialmente ...538

10.4.1. Tipos de Dados Espaciais do MySQL ...538

10.4.2. Criando Valores Espaciais ...538

10.4.3. Criando Colunas Espaciais ...541

10.4.4. Entrando com Dados em Colunas Espaciais ...541

10.4.5. Buscando Dados Espaciais ...542

10.5. Analisando Informação Espacial ...543

10.5.1. Funções Para Converter Geometrias Entre Formatos Diferentes ...543

10.5.2. Funções de Análise das Propriedades deGeometry ...544

10.5.3. Funções Que Criam Novas Geometrias de Outras Existentes ...549

10.5.4. Funções Para Testar Relações Espaciais Entre Objetos Geométricos ...550

10.5.5. Relações de Retângulo de Limite Mínimo (Minimal Bounding Rectangles - MBR) em Geometrias .550 10.5.6. Funções que Testam Relacionamentos Espaciais Entre Geometrias ...551

10.6. Otimizando Análises Espaciais ...552

10.6.1. Criando Índices Espaciais ...552

10.6.2. Usando Índice Espacial ...553

10.7. Compatibilidade e Conformidade com o MySQL ...554

10.7.1. Recursos GIS Que Ainda Não Estão Implementados ...554

11. Stored Procedures e Funções ...555

11.1. Sintaxe de Stored Procedure ...555

11.1.1. Manutenção de Stored Procedures ...555

11.1.2.SHOW PROCEDURE STATUSeSHOW FUNCTION STATUS ...557

11.1.3.CALL...557

11.1.4.BEGIN ... ENDCompound Statement ...557

11.1.5. InstruçãoDECLARE ...558

11.1.6. Variables in Stored Procedures ...558

11.1.7. Condições e Handlers ...558

11.1.8. Cursors ...559

11.1.9. Flow Control Constructs ...560

12. Ferramentas de Clientes e APIs do MySQL ...563

12.1. API C do MySQL ...563

12.1.1. Tipos de Dados da API C ...563

12.1.2. Visão Geral das Função da API C ...565

12.1.3. Descrição das Funções da API C ...568

12.1.4. Instruções Preparadas da API C ...599

12.1.5. Tipos de Dados de Instruções Preparadas da API C ...599

12.1.6. Visão Geral das Funções de Instruções Preparadas da API C ...601

12.1.7. Descrição das Funções de Instrução Preparada da API C ...603

12.1.8. Tratando a Execução de Múltiplas Consultas na API C ...616

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

12.1.10. Descrição das Funções de Threads da API C ...618

12.1.11. Descrição das Funções do Servidor Embutido da API C ...619

12.1.12. Dúvidas e problemas comuns ao utilzar a API C ...619

12.1.13. Construindo Programas Clientes ...621

12.1.14. Como Fazer um Cliente em Threads ...621

12.1.15. libmysqld, a Biblioteca do Servidor Embutido MySQL ...622

12.2. Suporte ODBC ao MySQL ...625

12.2.1. Como Instalar o MyODBC ...626

12.2.2. Como Preencher os Vários Campos no Programa de Administração do ODBC ...626

12.2.3. Parâmetros de Conexão do MyODBC ...627

12.2.4. Como Relatar Problemas com o MyODBC ...628

12.2.5. Programas que Funcionam com MyODBC ...628

12.2.6. Como Obter o Valor de uma ColunaAUTO_INCREMENTno ODBC ...632

12.2.7. Relatando Problemas com MyODBC ...632

12.3. Conectividade Java (JDBC) ao MySQL ...633

12.4. API PHP do MySQL ...633

12.4.1. Problemas Comuns com MySQL e PHP ...633

12.5. API Perl do MySQL ...633

12.5.1.DBIcomDBD::mysql...634

12.5.2. A interfaceDBI ...634

12.5.3. Mais InformaçõesDBI/DBD...640

12.6. API C++ do MySQL ...640

(11)

12.7. API Python do MySQL ...640

12.8. API Tcl do MySQL ...640

12.9. Eiffel Wrapper do MySQL ...640

13. Tratamento de Erros no MySQL ...641

13.1. Erros Retornados ...641

14. Estendendo o MySQL ...662

14.1. MySQL Internals ...662

14.1.1. Threads MySQL ...662

14.1.2. Pacotes de Teste do MySQL ...662

14.2. Adicionando Novas Funções ao MySQL ...664

14.2.1. SintaxeCREATE FUNCTION/DROP FUNCTION...664

14.2.2. Adicionando Novas Funções Definidas Por Usuário ...665

14.2.3. Adicionando uma Nova Função Nativa ...671

14.3. Adicionado Novos Procedimentos ao MySQL ...671

14.3.1. Análise de Procedimento ...672

14.3.2. Escrevendo um Procedimento ...672

A. Problemas e Erros Comuns ...673

A.1. Como Determinar o Que Está Causando Problemas ...673

A.2. Erros Comuns Usando o MySQL ...674

A.2.1. Erro:Access Denied ...674

A.2.2. Erro:MySQL server has gone away...674

A.2.3. Erro:Can't connect to [local] MySQL server ...675

A.2.4. Erro:Client does not support authentication protocol ...676

A.2.5. Erro:Host '...' is blocked...676

A.2.6. Erro:Too many connections...677

A.2.7. Erro:Some non-transactional changed tables couldn't be rolled back...677

A.2.8. Erro:Out of memory ...677

A.2.9. Erro:Packet too large...677

A.2.10. Erros de Comunicação / Comunicação Abortada ...678

A.2.11. Erro:The table is full...679

A.2.12. Erro:Can't create/write to file ...679

A.2.13. Erro no Cliente:Commands out of sync ...679

A.2.14. Erro:Ignoring user...679

A.2.15. Erro:Table 'xxx' doesn't exist ...680

A.2.16. Erro:Can't initialize character set xxx ...680

A.2.17. Arquivo Não Encontrado ...680

A.3. Assuntos Relacionados a Instalação ...681

A.3.1. Problemas de Ligação com a Biblioteca do Cliente MySQL ...681

A.3.2. Como Executar o MySQL Como Um Usuário Normal ...682

A.3.3. Problemas com Permissões de Arquivos ...682

A.4. Assuntos Relacionados a Administração ...683

A.4.1. O Que Fazer Se o MySQL Continua Falhando ...683

A.4.2. Como Recuperar uma Senha de Root Esquecida ...684

A.4.3. Como o MySQL Trata de Discos Sem Espaço ...685

A.4.4. Onde o MySQL Armazena Arquivos Temporários ...686

A.4.5. Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File/tmp/mysql.sock 686 A.4.6. Problemas Com Fuso Horário ...687

A.5. Assuntos Relacionados a Consultas ...687

A.5.1. Caso-Sensitivito em Pesquisas ...687

A.5.2. Problemas Usando ColunasDATE ...687

A.5.3. Problemas com ValoresNULL ...688

A.5.4. Problemas comalias ...689

A.5.5. Deletando Linhas de Tabelas Relacionadas ...689

A.5.6. Resolvendo Problemas Com Registros Não Encontrados ...689

A.5.7. Problemas com Comparação de Ponto Flutuante ...690

A.6. Assuntos Relacionados ao Otimizador ...691

A.6.1. Camo evitar o varredura da tabela,,, ...691

A.7. Assuntos Relacionados a Definições de Tabelas ...692

A.7.1. Problemas comALTER TABLE. ...692

A.7.2. Como Alterar a Ordem das Colunas em Uma Tabela ...692

A.7.3. Problemas com TEMPORARY TABLE ...693

B. Contribuição de Programas ...694 B.1. APIs ...694 B.2. Conversores ...695 B.3. Utilitários ...696 C. Colaboradores do MySQL ...698 C.1. Desenvolvedores do MySQL ...698 C.2. Coolaboradores do MySQL ...701

C.3. Responsáveis pela Documentação e Tradução ...705

(12)

C.5. Pacotes que suportam o MySQL ...707

C.6. Ferramentas que são usadas para criar o MySQL ...707

C.7. Responsáveis pelo Suporte do MySQL ...708

D. Histórico de Alterações do MySQL ...709

D.1. Alterações na distribuição 5.0.0 (Development) ...709

D.2. Alterações na distribuição 4.1.x (Alpha) ...709

D.2.1. Alterações na distribuição 4.1.2 (not released yet) ...710

D.2.2. Alterações na distribuição 4.1.1 (01 de Dez de 2003) ...710

D.2.3. Alterações na distribuição 4.1.0 (03 Apr 2003: Alpha) ...714

D.3. Alterações na distribuição 4.0.x (Production) ...715

D.3.1. Alterações na distribuição 4.0.17 (not released yet) ...716

D.3.2. Alterações na distribuição 4.0.16 (17 Out 2003) ...717

D.3.3. Alterações na distribuição 4.0.15 (03 Sep 2003) ...719

D.3.4. Alterações na distribuição 4.0.14 (18 Jul 2003) ...722

D.3.5. Alterações na distribuição 4.0.13 (16 May 2003) ...724

D.3.6. Alterações na distribuição 4.0.12 (15 Mar 2003: Production) ...727

D.3.7. Alterações na distribuição 4.0.11 (20 Feb 2003) ...728

D.3.8. Alterações na distribuição 4.0.10 (29 Jan 2003) ...729

D.3.9. Alterações na distribuição 4.0.9 (09 Jan 2003) ...730

D.3.10. Alterações na distribuição 4.0.8 (07 Jan 2003) ...731

D.3.11. Alterações na distribuição 4.0.7 (20 Dec 2002) ...731

D.3.12. Alterações na distribuição 4.0.6 (14 Dec 2002: Gamma) ...732

D.3.13. Alterações na distribuição 4.0.5 (13 Nov 2002) ...733

D.3.14. Alterações na distribuição 4.0.4 (29 Sep 2002) ...734

D.3.15. Alterações na distribuição 4.0.3 (26 Aug 2002: Beta) ...736

D.3.16. Alterações na distribuição 4.0.2 (01 Jul 2002) ...737

D.3.17. Alterações na distribuição 4.0.1 (23 Dec 2001) ...741

D.3.18. Alterações na distribuição 4.0.0 (Oct 2001: Alpha) ...741

D.4. Alterações na distribuição 3.23.x (Recent; still supported) ...743

D.4.1. Alterações na distribuição 3.23.59 (not released yet) ...743

D.4.2. Alterações na distribuição 3.23.58 (11 Sep 2003) ...744

D.4.3. Alterações na distribuição 3.23.57 (06 Jun 2003) ...744

D.4.4. Alterações na distribuição 3.23.56 (13 Mar 2003) ...745

D.4.5. Alterações na distribuição 3.23.55 (23 Jan 2003) ...746

D.4.6. Alterações na distribuição 3.23.54 (05 Dec 2002) ...746

D.4.7. Alterações na distribuição 3.23.53 (09 Oct 2002) ...747

D.4.8. Alterações na distribuição 3.23.52 (14 Aug 2002) ...747

D.4.9. Alterações na distribuição 3.23.51 (31 May 2002) ...748

D.4.10. Alterações na distribuição 3.23.50 (21 Apr 2002) ...749

D.4.11. Alterações na distribuição 3.23.49 ...749

D.4.12. Alterações na distribuição 3.23.48 (07 Feb 2002) ...750

D.4.13. Alterações na distribuição 3.23.47 (27 Dec 2001) ...750

D.4.14. Alterações na distribuição 3.23.46 (29 Nov 2001) ...751

D.4.15. Alterações na distribuição 3.23.45 (22 Nov 2001) ...751

D.4.16. Alterações na distribuição 3.23.44 (31 Oct 2001) ...751

D.4.17. Alterações na distribuição 3.23.43 (04 Oct 2001) ...752

D.4.18. Alterações na distribuição 3.23.42 (08 Sep 2001) ...753

D.4.19. Alterações na distribuição 3.23.41 (11 Aug 2001) ...753

D.4.20. Alterações na distribuição 3.23.40 ...754

D.4.21. Alterações na distribuição 3.23.39 (12 Jun 2001) ...754

D.4.22. Alterações na distribuição 3.23.38 (09 May 2001) ...755

D.4.23. Alterações na distribuição 3.23.37 (17 Apr 2001) ...756

D.4.24. Alterações na distribuição 3.23.36 (27 Mar 2001) ...756

D.4.25. Alterações na distribuição 3.23.35 (15 Mar 2001) ...757

D.4.26. Alterações na distribuição 3.23.34a ...757

D.4.27. Alterações na distribuição 3.23.34 (10 Mar 2001) ...757

D.4.28. Alterações na distribuição 3.23.33 (09 Feb 2001) ...758

D.4.29. Alterações na distribuição 3.23.32 (22 Jan 2001: Production) ...759

D.4.30. Alterações na distribuição 3.23.31 (17 Jan 2001) ...759

D.4.31. Alterações na distribuição 3.23.30 (04 Jan 2001) ...760

D.4.32. Alterações na distribuição 3.23.29 (16 Dec 2000) ...761

D.4.33. Alterações na distribuição 3.23.28 (22 Nov 2000: Gamma) ...762

D.4.34. Alterações na distribuição 3.23.27 (24 Oct 2000) ...763

D.4.35. Alterações na distribuição 3.23.26 (18 Oct 2000) ...764

D.4.36. Alterações na distribuição 3.23.25 (29 Sep 2000) ...764

D.4.37. Alterações na distribuição 3.23.24 (08 Sep 2000) ...765

D.4.38. Alterações na distribuição 3.23.23 (01 Sep 2000) ...766

D.4.39. Alterações na distribuição 3.23.22 (31 Jul 2000) ...767

D.4.40. Alterações na distribuição 3.23.21 ...767

(13)

D.4.42. Alterações na distribuição 3.23.19 ...768

D.4.43. Alterações na distribuição 3.23.18 ...768

D.4.44. Alterações na distribuição 3.23.17 ...769

D.4.45. Alterações na distribuição 3.23.16 ...769

D.4.46. Alterações na distribuição 3.23.15 (May 2000: Beta) ...770

D.4.47. Alterações na distribuição 3.23.14 ...771

D.4.48. Alterações na distribuição 3.23.13 ...771

D.4.49. Alterações na distribuição 3.23.12 (07 Mar 2000) ...771

D.4.50. Alterações na distribuição 3.23.11 ...772

D.4.51. Alterações na distribuição 3.23.10 ...772

D.4.52. Alterações na distribuição 3.23.9 ...773

D.4.53. Alterações na distribuição 3.23.8 (02 Jan 2000) ...773

D.4.54. Alterações na distribuição 3.23.7 (10 Dec 1999) ...774

D.4.55. Alterações na distribuição 3.23.6 ...774

D.4.56. Alterações na distribuição 3.23.5 (20 Oct 1999) ...775

D.4.57. Alterações na distribuição 3.23.4 (28 Sep 1999) ...776

D.4.58. Alterações na distribuição 3.23.3 ...776

D.4.59. Alterações na distribuição 3.23.2 (09 Aug 1999) ...777

D.4.60. Alterações na distribuição 3.23.1 ...777

D.4.61. Alterações na distribuição 3.23.0 (05 Aug 1999: Alpha) ...778

D.5. Alterações na distribuição 3.22.x (Old; discontinued) ...779

D.5.1. Alterações na distribuição 3.22.35 ...779

D.5.2. Alterações na distribuição 3.22.34 ...780

D.5.3. Alterações na distribuição 3.22.33 ...780

D.5.4. Alterações na distribuição 3.22.32 (14 Feb 2000) ...780

D.5.5. Alterações na distribuição 3.22.31 ...780

D.5.6. Alterações na distribuição 3.22.30 ...780

D.5.7. Alterações na distribuição 3.22.29 (02 Jan 2000) ...780

D.5.8. Alterações na distribuição 3.22.28 (20 Oct 1999) ...781

D.5.9. Alterações na distribuição 3.22.27 ...781

D.5.10. Alterações na distribuição 3.22.26 (16 Sep 1999) ...781

D.5.11. Alterações na distribuição 3.22.25 ...781

D.5.12. Alterações na distribuição 3.22.24 (05 Jul 1999) ...781

D.5.13. Alterações na distribuição 3.22.23 (08 Jun 1999) ...782

D.5.14. Alterações na distribuição 3.22.22 (30 Apr 1999) ...782

D.5.15. Alterações na distribuição 3.22.21 ...782

D.5.16. Alterações na distribuição 3.22.20 (18 Mar 1999) ...783

D.5.17. Alterações na distribuição 3.22.19 (Mar 1999: Production) ...783

D.5.18. Alterações na distribuição 3.22.18 ...783

D.5.19. Alterações na distribuição 3.22.17 ...783

D.5.20. Alterações na distribuição 3.22.16 (Feb 1999: Gamma) ...783

D.5.21. Alterações na distribuição 3.22.15 ...783 D.5.22. Alterações na distribuição 3.22.14 ...784 D.5.23. Alterações na distribuição 3.22.13 ...784 D.5.24. Alterações na distribuição 3.22.12 ...784 D.5.25. Alterações na distribuição 3.22.11 ...785 D.5.26. Alterações na distribuição 3.22.10 ...785 D.5.27. Alterações na distribuição 3.22.9 ...786 D.5.28. Alterações na distribuição 3.22.8 ...786

D.5.29. Alterações na distribuição 3.22.7 (Sep 1998: Beta) ...787

D.5.30. Alterações na distribuição 3.22.6 ...787

D.5.31. Alterações na distribuição 3.22.5 ...787

D.5.32. Alterações na distribuição 3.22.4 ...788

D.5.33. Alterações na distribuição 3.22.3 ...789

D.5.34. Alterações na distribuição 3.22.2 ...789

D.5.35. Alterações na distribuição 3.22.1 (Jun 1998: Alpha) ...790

D.5.36. Alterações na distribuição 3.22.0 ...790 D.6. Alterações na distribuição 3.21.x ...791 D.6.1. Alterações na distribuição 3.21.33 ...791 D.6.2. Alterações na distribuição 3.21.32 ...791 D.6.3. Alterações na distribuição 3.21.31 ...792 D.6.4. Alterações na distribuição 3.21.30 ...792 D.6.5. Alterações na distribuição 3.21.29 ...792 D.6.6. Alterações na distribuição 3.21.28 ...793 D.6.7. Alterações na distribuição 3.21.27 ...793 D.6.8. Alterações na distribuição 3.21.26 ...793 D.6.9. Alterações na distribuição 3.21.25 ...794 D.6.10. Alterações na distribuição 3.21.24 ...794 D.6.11. Alterações na distribuição 3.21.23 ...794 D.6.12. Alterações na distribuição 3.21.22 ...795

(14)

D.6.13. Alterações na distribuição 3.21.21a ...795 D.6.14. Alterações na distribuição 3.21.21 ...795 D.6.15. Alterações na distribuição 3.21.20 ...795 D.6.16. Alterações na distribuição 3.21.19 ...796 D.6.17. Alterações na distribuição 3.21.18 ...796 D.6.18. Alterações na distribuição 3.21.17 ...796 D.6.19. Alterações na distribuição 3.21.16 ...797 D.6.20. Alterações na distribuição 3.21.15 ...797 D.6.21. Alterações na distribuição 3.21.14b ...797

D.6.22. Alterações na distribuição 3.21.14a ...797

D.6.23. Alterações na distribuição 3.21.13 ...798 D.6.24. Alterações na distribuição 3.21.12 ...798 D.6.25. Alterações na distribuição 3.21.11 ...799 D.6.26. Alterações na distribuição 3.21.10 ...799 D.6.27. Alterações na distribuição 3.21.9 ...800 D.6.28. Alterações na distribuição 3.21.8 ...800 D.6.29. Alterações na distribuição 3.21.7 ...800 D.6.30. Alterações na distribuição 3.21.6 ...801 D.6.31. Alterações na distribuição 3.21.5 ...801 D.6.32. Alterações na distribuição 3.21.4 ...801 D.6.33. Alterações na distribuição 3.21.3 ...801 D.6.34. Alterações na distribuição 3.21.2 ...802 D.6.35. Alterações na distribuição 3.21.0 ...802 D.7. Alterações na distribuição 3.20.x ...803 D.7.1. Alterações na distribuição 3.20.18 ...803 D.7.2. Alterações na distribuição 3.20.17 ...804 D.7.3. Alterações na distribuição 3.20.16 ...804 D.7.4. Alterações na distribuição 3.20.15 ...805 D.7.5. Alterações na distribuição 3.20.14 ...805 D.7.6. Alterações na distribuição 3.20.13 ...805 D.7.7. Alterações na distribuição 3.20.11 ...806 D.7.8. Alterações na distribuição 3.20.10 ...806 D.7.9. Alterações na distribuição 3.20.9 ...807 D.7.10. Alterações na distribuição 3.20.8 ...807 D.7.11. Alterações na distribuição 3.20.7 ...807 D.7.12. Alterações na distribuição 3.20.6 ...807 D.7.13. Alterações na distribuição 3.20.3 ...808 D.7.14. Alterações na distribuição 3.20.0 ...809 D.8. Alterações na distribuição 3.19.x ...809 D.8.1. Alterações na distribuição 3.19.5 ...809 D.8.2. Alterações na distribuição 3.19.4 ...810 D.8.3. Alterações na distribuição 3.19.3 ...810

E. Portando para Outros Sistemas ...811

E.1. Depurando um Servidor MySQL ...811

E.1.1. Compilando o MYSQL para Depuração ...812

E.1.2. Criando Arquivos Trace (Rastreamento) ...812

E.1.3. Depurando o mysqld no gdb ...813

E.1.4. Usando Stack Trace ...814

E.1.5. Usando Arquivos de Log para Encontrar a Causa dos Erros no mysqld ...814

E.1.6. Fazendo um Caso de Teste Se Ocorre um Corrompimento de Tabela ...815

E.2. Depurando um cliente MySQL. ...815

E.3. O Pacote DBUG ...816

E.4. Métodos de Lock ...817

E.5. Comentários Sobre Threads RTS ...818

E.6. Diferença en Entre Alguns Pacotes de Threads ...819

F. Variáveis de Ambientes do MySQL ...820

G. Sintaxe de Expressões Regulares do MySQL ...821

H. GPL - Licença Pública Geral do GNU ...824

(15)

Este é o Manual de Referência para oSistema de Banco de Dados MySQL. Este versão se refere a versão 5.0.6-beta do

MySQL Servermas também se aplica a versões mais antigas (tais como 3.23 e 4.0-produção) já que as alterações são sempre in-dicadas. Também há referência a versão 5.0 (desenvolvimento).

(16)

O programaMySQL(R) é um servidor robusto de bancos de dadosSQL (Structured Query Language - Linguagem Estruturada para Pesquisas)muito rápido, multi-tarefa e multi-usuário.O Servidor MySQLpode ser usado em sis-temas de produção com alta carga e missão crítica bem como pode ser embutido em programa de uso em massa.MySQLé uma marca registrada daMySQL AB.

O programaMySQLé deLicença Dupla. Os usuários podem escolher entre usar o programaMySQLcomo um produtoOpen Source/Free Softwaresob os termos daGNU General Public License(http://www.fsf.org/licenses/) ou podem comprar uma licença comercial padrão daMySQL AB. SeeSecção 1.4, “Suporte e Licenciamento do MySQL”.

O site web doMySQL(http://www.mysql.com/) dispõe das últimas informações sobre o programaMySQL. A seguinte lista descreve algumas seções de particular interesse neste manual:

• Para informações sobre a empresa por trás doServidor do Banco de Dados MySQL, vejaSecção 1.3, “Visão Geral da MySQL AB”.

• Para discussões das capacidades doServidor do Banco de Dados MySQL, vejaSecção 1.2.2, “As Principais Caracte-rísticas do MySQL”.

• Para instruções de instalação, vejaCapítulo 2, Instalação do MySQL.

• Para dicas sobre a portabilidade doServidor do Banco de Dados MySQLpara novas arquiteturas ou sistemas opera-cionais, vejaApêndice E, Portando para Outros Sistemas.

• Para informações sobre a atualização da versão 4.0, vejaSecção 2.5.1, “Atualizando da Versão 4.0 para 4.1”. • Para informações sobre a atualização da versão 3.23, vejaSecção 2.5.2, “Atualizando da Versão 3.23 para 4.0”. • Para informações sobre a atualização da versão 3.22, vejaSecção 2.5.3, “Atualizando da versão 3.22 para 3.23”.

• Para um tutorial de introdução aoServidor do Banco de Dados MySQL, vejaCapítulo 3, Tutorial de Introdução Do MySQL.

• Para exemplos deSQLe informações sobre benchmarks, veja o diretório de benchmarks (sql-benchna distribuição). • Para o histórico de novos recursos e correções de erros, vejaApêndice D, Histórico de Alterações do MySQL.

• Para uma lista de erros atualmente conhecidos e mal-funcionamento, vejaSecção 1.8.6, “Erros Conhecidos e Deficiências de Projetos no MySQL”.

• Para projetos futuros, vejaSecção 1.6, “MySQL e o Futuro (o TODO)”.

• Para ver a lista de todos os colaboradores deste projeto, vejaApêndice C, Colaboradores do MySQL.

Importante:

Relatórios de erros (também chamados bugs), bem como dúvidas e comentários, devem ser enviados para a lista de email geral do MySQL. SeeSecção 1.7.1.1, “As Listas de Discussão do MySQL”. SeeSecção 1.7.1.3, “Como relatar erros ou problemas”. O scriptmysqlbugdeve ser usado para gerar comunicados de erros no Unix. (A distribuição do Windows contém um arquivo

mysqlbug.txtno diretório base que pode ser usado como um template para um relatório de erro.

Em distribuições fonte, o scriptmysqlbugpode ser encontrado no diretórioscripts. Para distribuições binárias, omysqlbug

pode ser encontrado no diretóriobin(/usr/binpara o pacote RMP doservidor MySQL.

Se você encontrou um erro de segurança noServidor MySQL, você deve enviar um email para<security@mysql.com>.

1.1. Sobre Este Manual

Este é o manual de referênciaMySQL; ele documenta oMySQLaté a versão 5.0.6-beta. Mudanças funcionais são sempre indicadas com referência a versão, assim este manual também pode ser utilizado caso você esteja utilizando uma versão mais antiga do

MySQL(como 3.23 ou 4.0-produção). Também a referências a versão 5.0 (desenvolvimento).

Sendo um manual de referência, ele não fornece instruções gerais sobreSQLou conceitos de banco de dados relacionais. Como oPrograma da Banco de Dados MySQLestá sob constante desenvolvimento, o manual também é atualizado

(17)

fre-qüentemente. A versão mais recente deste manual está disponível em http://www.mysql.com/documentation/ em diferentes forma-tos, incluindo HTML, PDF, e versões HLP do Windows.

O documento original é uma arquivo Texinfo. A versão HTML é produzida automaticamente usando uma versão modificada do

texi2html. A versão texto e Info são produzidas commakeinfo. A versão PostScript é produzida usandotexi2dvie

dvips. A versão PDF é produzida compdftex.

Se você tiver dificuldades de encontrar informações no manual, você pode tentar nossa versão com busca em http://www.mysql.com/doc/.

Se você tiver qualquer sugestão a respeito de adições e correções neste manual, por favor envie-os para a equipe de documentação em http://www.mysql.com/company/contact/.

Este manual foi inicialmente escrito por David Axmark e Michael (Monty) Widenius. Atualmente é mantido pela Equipe de Docu-mentação da MySQL, que conta com Arjen Lentz, Paul DuBois e Stefan Hinz. Para outros colaboradores, vejaApêndice C, Cola-boradores do MySQL.

A traduçao deste manual foi feita por Daniel Coelho Teobaldo e Carlos Henrique Paulino sob a supervisão da EAC Software. Os direitos autorais (2003-2006) deste manual pertence a compania SuecaMySQL AB. SeeSecção 1.4.2, “Copyrights e Licenças Usadas pelo MySQL”.

1.1.1. Convenções Usadas Neste Manual

Este manual utiliza algumas convenções tipográficas:

• constant

Fonte de largura fixa é usada para nomes de comandos e opções; instruções SQL; nomes de bancos de dados, tabelas e colunas; código C e Perl; e variáveis de ambiente. Exemplo: ``Para ver como omysqladminfunciona, execute-o com a opção --help.''

• filename

Fonte de largura fixa com aspas é usada para nomes e caminhos de arquivos. Exemplo: ``A distribuição é instalada sobre o dire-tório/usr/local.''

• ‘c’

Fonte de largura constante com aspas é também usada para indicar sequências de caracteres. Exemplo: ``Para especificar um meta caracter, use o caractere ‘%’.''

italic

Fonte Itálica é usada para dar ênfase, como aqui.boldface

Fonte em negrito é usada em cabeçalhos de tabela e indicar ênfase especial.

Quando um comando deve ser executado por um programa, ele é indicado por um prompt antes do comando. Por exemplo,

shell>indica um comando que é executado do seu shell atual emysql>indica um comando que é executado no programa cli-entemysql;

shell> digite um comando shell aqui

mysql> digite um comando mysql aqui

A ``shell'' é seu interpretador de comando. No Unix, ele é normalmente um programa comoshoucsh. No Windows, o equivalen-te é ocommand.comoucmd.exe, normalmente executado como um console do Windows.

Comandos Shell são mostrados usando a sintaxe do Shell Bourne. Se você usa um shell do estilocsh, pode ser necessário alterar algum de seus comandos. Por exemplo, a sequência para configurar uma variável de ambiente e executar um comando se parece com o listado abaixo na sintaxe Bourne Shell:

shell> NOMEVAR=valor algum_comando

Paracshoutcsh, execute a sequência desta forma:

shell> setenv NOMEVAR valor

(18)

Frequentemente, nomes de bancos de dados, tabelas e colunas devem ser substituídos nos comandos. Para indicar que as substitui-ções são necessárias, este manual usanome_db,nome_tblenome_col. Por exemplo, você pode encontrar uma expressão as-sim:

mysql> SELECT nome_col FROM nome_bd.nome_tbl;

Isso significa que se você estiver trabalhando numa expressão similar, forneceria seu próprio nome de banco de dados, tabela e co-lunas, talvez assim:

mysql> SELECT nome_autor FROM biblio_bd.lista_autor;

SQL keywords não caso sensitivas e podem ser escritas em maiúscula ou minúscula. Este manual utiliza letras maiúsculas. Em descrições de sintaxe, colchetes (‘[’ e ‘]’) são usados para indicar palavras ou cláusulas opcionais. Por exemplo, na seguinte instrução,IF EXISTSé opcional:

DROP TABLE [IF EXISTS] nome_tbl

Quando elementos da sintaxe possuem mais de uma alternativa, elas são separados por barras verticais (‘|’). Quando um menbro de um conjunto de opções pode ser escolhido, as alternativas são listadas em colchetes (‘[’ e ‘]’):

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

Quando um membro de um conjunto de opções deve ser selecionado, as alternativas são listadas dentro de chaves (‘{’ e ‘}’):

{DESCRIBE | DESC} nome_tbl {nome_col | metacar}

1.2. Visão Geral do Sistema de Gerenciamento de Banco de Dados

MySQL

MySQL, o mais popular sistema de gerenciamento de banco de dados SQLOpen Source, é desenvolvido, distribuído e tem su-porte daMySQL AB. AMySQL ABé uma empresa comercial, fundada pelos desenvolvedores do MySQL, cujos negócios é forne-cer serviços relacionados ao sistema de gerenciamento de banco de dadosMySQL. SeeSecção 1.3, “Visão Geral da MySQL AB”. O web site doMySQL(http://www.mysql.com/) fornece informações mais recentes sobre e programaMySQLe aMySQL AB.

• O MySQL é um sistema de gerenciamento de bancos de dados.

Um banco de dados é uma coleção de dados estruturados. Ele pode ser qualquer coisa desde uma simples lista de compras a uma galeria de imagens ou a grande quantidade de informação da sua rede coorporativa. Para adicionar, acessar, e processar dos armazenados em um banco de dados de um computador, você necessita de um sistema de gerenciamento de bancos de da-dos como o ServidorMySQL. Como os computadores são muito bons em lidar com grandes quantidades de dados, o gerencia-mento de bancos de dados funciona como a engrenagem central na computação, seja como utilitários independentes ou como partes de outras aplicações.

• O MySQL é um sistema de gerenciamento de bancos de dados relacional.

Um banco de dados relacional armazena dados em tabelas separadas em vez de colocar todos os dados um só local. Isso propor-ciona velocidade e flexibilidade. A parteSQLdo ``MySQL'' atenda pela ``Structured Query Language - Lingua-gem Estrutural de Consultas''. SQL é linguagem padrão mais comum usada para acessar banco de dados e é defini-da pelo Padrão ANSI/ISO SQL. (O padrão SQL está vem evoluindo desde 1986 e existem diversas versões. Neste manual, ''SQL-92'' se refere ao padrão liberado em 1992, ''SQL-99'' se refere ao padrão liberado em 1999, e ''SQL:2003'' se refere a versão do que esperamos que seja liberado no meio de 2003. Nós usamos o termo ''o padrão SQL'' indicando a versão atual do Padrão SQL em qualquer momento).

• O é MySQL um softwareOpen Source.

Open Sourcesignifica que é possível para qualquer um usar e modificar o programa. Qualquer pessoa pode fazer download doMySQLpela Internet e usá-lo sem pagar nada. Se você quiser, você pode estudar o código fonte e alterá-lo para adequá-lo às suas necessidades. OMySQLusa aGPL(GNU General Public License - Licença Pública Geral GNU)

http://www.fsf.org/licenses, para definir o que você pode e não pode fazer com o software em diferentes situações. Se você sen-tir desconforto com aGPLou precisar embutir oMySQLem uma aplicação comercial¸ você pode adquirir a versão comercial li-cenciada conosco. SeeSecção 1.4.3, “Licenças do MySQL”.

(19)

• Por que usar o Banco de Dados MySQL?

Oservidor de banco de dados MySQLé extremamente rápido, confiável, e fácil de usar. Se isto é o que você está procurando, você deveria experimentá-lo. OServidor MySQLtambém tem um conjunto de recursos muito práticos desen-volvidos com a cooperação de nossos usuários. Você pode encontrar comparativos de performance doServidor MySQL

com outros gerenciadores de bancos de dados na nossa página de benchmark SeeSecção 5.1.4, “O Pacote de Benchmark do MySQL”.

OServidor MySQLfoi desenvolvido originalmente para lidar com bancos de dados muito grandes de maneira muito mais rápida que as soluções existentes e tem sido usado em ambientes de produção de alta demanda por diversos anos de maneira bem sucedida. Apesar de estar em constante desenvolvimento, oServidor MySQLoferece hoje um rico e proveitoso con-junto de funções. A conectividade, velocidade, e segurança fazem com que oMySQLseja altamente adaptável para acessar ban-cos de dados na Internet.

• As características técnicas do MySQL

Para informações técnicas avançadas, vejaCapítulo 6, Referência de Linguagem do MySQL. OPrograma de Banco de Dados MySQLé um sistema cliente/servidor que consiste de um servidorSQLmulti-tarefa que suporta acessos diferentes, di-versos programas clientes e bibliotecas, ferramentas administrativas e diversas interfaces de programação (API's).

Também concedemos oServidor MySQLcomo uma biblioteca multi-tarefa que você pode ligar à sua aplicação para chegar a um produto mais rápido, menor e mais fácilmente gerenciável.

• MySQL tem muitos softwares de colaboradores disponível.

É bem provável que sua aplicação ou linguagem favorita já suporte oServidor de Banco de Dados MySQL.

A pronúncia oficial doMySQLé ``Mai Ess Que Ell'' (e não SEQUEL). Mas nós não ligamos se você pronunciar MAI-SEQUEL ou de outra forma qualquer.

1.2.1. História do MySQL

Quando começamos, tínhamos a intenção de usar omSQLpara conectar às nossas tabelas utilizando nossas rápidas rotinas de baixo nível (ISAM). Entretanto, depois de alguns testes, chegamos a conclusão que omSQLnão era rápido e nem flexível o suficiente pa-ra nossas necessidades. Isto resultou em uma nova interface SQL papa-ra nosso banco de dados, mas com ppa-raticamente a mesma Inter-face API domSQL. Esta API foi escolhida para facilitar a portabilidade para códigos de terceiros que era escrito para uso com

mSQLpara ser portado facilmente para uso com oMySQL.

A derivação do nome MySQL não é bem definida. Nosso diretório base e um grande número de nossas bibliotecas e ferramentas sempre tiveram o prefixo ``my'' por pelo menos 10 anos. A filha de Monty também ganhou o nome My. Qual das duas originou o nome do MySQL continua sendo um mistério, mesmo para nós.

O nome do golfinho do MySQL (nosso logo) éSakila.Sakilafoi escolhido pelos fundadores da MySQL AB de uma enorme lista de nomes sugeridos pelos usuários em nosso concurso "Name the Dolphin". O nome vencedor foi enviado por Ambrose Twe-baze, um desenvolvedor de programas open source de Swaziland, Africa. De acordo com Ambrose, o nome Sakila tem as suas raí-zes em SiSwati, a língua local de Swaziland. Sakila é também o nome de uma cidade em Arusha, Tanzania, próxima ao país de orí-gem de Ambrose, Uganda.

1.2.2. As Principais Características do MySQL

A seguinte lista descreve algumas das características mais importantes doProgrma de Banco de Dados MySQL. See Sec-ção 1.5.1, “MySQL 4.0 in a Nutshell”.

• Portabilidade e

• Escrito em C e C++.

• Testado com um amplo faixa de compiladores diferentes.

• Funciona em diversas plataformas. SeeSecção 2.2.3, “Sistemas Operacionais suportados pelo MySQL”. • Utiliza o GNU Automake, Autoconf, e Libtool para portabilidade.

• APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby e Tcl estão disponíveis. SeeCapítulo 12, Ferramentas de Clientes e APIs do MySQL.

(20)

• Suporte total a multi-threads usando threads diretamente no kernel. Isto significa que se pode facilmente usar múltiplas CPUs, se disponível.

• Fornece mecanismos de armazenamento transacional e não transacional.

• Tabelas em disco (MyISAM) baseadas em árvores-B extremamente rápidas com compressão de índices.

• É relativamente fácil se adicionar outro mecanismo de armazenamento. Isto é útil se você quiser adicionar uma interface SQL a um banco de dados caseiro.

• Um sistema de alocação de memória muito rápido e baseado em processo(thread). • Joins muito rápidas usando uma multi-join de leitura única otimizada.

• Tabelas hash em memória que são usadas como tabelas temporárias.

• Funções SQL são implementadas por meio de uma biblioteca de classes altamente otimizada e com o máximo de perfor-mance. Geralmente não há nenhuma alocação de memória depois da inicialização da pesquisa.

• O código doMySQLfoi testado com Purify (um detector comercial de falhas de memória) e também com o Valgrind, uma ferramentaGPL(http://developer.kde.org/~sewardj/).

• Disponível como versão cliente/servidor ou embutida(ligada). • Tipos de Coluna

• Aceita diversos tipos de campos: tipos inteiros de 1, 2, 3, 4 e 8 bytes com e sem sinal,FLOAT,DOUBLE,CHAR,VARCHAR,

TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SETeENUM. SeeSecção 6.2, “Tipos de Campos”. • Registros de tamanhos fixos ou variáveis.

• Comandos e Funções

• Completo suporte a operadores e funções nas partesSELECTeWHEREdas consultas. Por exemplo:

mysql> SELECT CONCAT(first_name, " ", last_name)

-> FROM nome_tbl

-> WHERE income/dependents > 10000 AND age > 30;

• Suporte pleno às cláusulas SQLGROUP BYeORDER BY. Suporte para funções de agrupamento (COUNT(), CO-UNT(DISTINCT ...),AVG(),STD(),SUM(),MAX()eMIN()).

• Suporte paraLEFT OUTER JOINeRIGHT OUTER JOINcom as sintaxes SQL e ODBC. • Alias em tabelas e colunas são disponíveis como definidos no padrão SQL92.

• DELETE,INSERT,REPLACE, eUPDATEretornam o número de linhas que foram alteradas (afetadas). É possível retornar o número de linhas com padrão coincidentes configurando um parâmetro quando estiver conectando ao servidor.

• O comando específico doMySQL SHOWpode ser usado para devolver informações sobre bancos de dados, tabelas e índices. O comandoEXPLAINpode ser usado para determinar como o otimizador resolve a consulta.

• Nomes de funções não conflitam com nomes de tabelas ou colunas. Por exemplo,ABSé um nome de campo válido. A úni-ca restrição é que para uma chamada de função, espaços não são permitidos entre o nome da função e o ‘(’ que o segue. See

Secção 6.1.7, “Tratamento de Palavras Reservadas no MySQL”.

• Você pode misturar tabelas de bancos de dados diferentes na mesma pesquisa (como na versão 3.22). • Segurança

• Um sistema de privilégios e senhas que é muito flexível, seguro e que permite verificação baseada em estações/máquinas. Senhas são seguras porque todo o tráfico de senhas é criptografado quando você se conecta ao servidor.

• Escalabilidade e limites

• Lida com bancos de dados enormes. Usamos oServidor MySQLcom bancos de dados que contém 50.000.000 registros e sabemos de usuários que usam oServidor MySQLcom 60.000 tabelas e aproximadamente 5.000.000.000 de linhas. • São permitidos até 32 índices por tabela. Cada índice pode ser composto de 1 a 16 colunas ou partes de colunas. O tamanho

máximo do índice é de 500 bytes (isto pode ser alterado na compilação do MySQL). Um índice pode usar o prefixo de cam-po com um ticam-poCHARouVARCHAR.

(21)

• Conectividade

• Os clientes podem se conectar ao servidor MySQL usando sockets TCP/IP, em qualquer plataforma. No sistema Windows na família NT (NT, 2000 ou XP), os clientes podem se conectar usando named pipes. No sistema Unix, os clientes podem se conectar usando arquivos sockets.

• A interface Connector/ODBC fornece ao MySQL suporte a progras clientes que usam conexão ODBC

(Open-DataBase-Connectivity). Por exemplo, você pode usar o MS Access para conectar ao seu servidorMySQL. Os clien-tes podem ser executados no Windows ou Unix. O fonte do Connector/ODBC está disponível. Todas as funções ODBC são suportadas, assim como muitas outras.

SeeSecção 12.2, “Suporte ODBC ao MySQL”. • Localização

• O servidor pode apresentar mensagem de erros aos clientes em várias línguas. SeeSecção 4.7.2, “Mensagens de Erros em Outras Línguas”.

• Suporte total para vários conjuntos de caracteres, que incluem ISO-8859-1 (Latin1), big5, ujis e mais. Por exemplo, os ca-racteres Escandinavos ‘â’, ‘ä’, ‘ö’ são permitidos em nomes de tabelas e colunas.

• Todos os dados são armazenados no conjunto de caracteres escolhido. Todas as comparações em colunas de seqüências ca-so-insensitivo.

• A ordenação é feita de acordo com o conjunto de caracteres escolhido (o modo sueco por padrão). É possível alterar isso quando o servidorMySQLé iniciado. Para ver um exemplo de várias ordenações avançadas, procure pelo código de ordena-ção Tcheca. OServidor MySQLsuporta diversos conjuntos de caracteres que podem ser especificados em tempo de compilação e execução.

• Clientes e Ferramentas

• O servidor MySQL foi construído com suporte para instruções SQL que verificam, otimizam e reparam tabelas. Estas ins-truções estão disponíveis a partir da linha de comando por meio do clientemyisamcheck, O MySQL inclui também o

myisamchk, um utilitário muito rápido para realizar estas operações em tabelasMyISAM. SeeCapítulo 4, Administração do Bancos de Dados MySQL.

• Todos os programasMySQLpodem ser chamados com as opções--helpou-?para obter ajuda online.

1.2.3. Estabilidade do MySQL

Esta seção discute as questões ``Quão estável é o MySQL?'' e ``Posso depender do MySQL neste projeto?''. Tentaremos deixar cla-ro estes assuntos e responder algumas das questões mais importantes que dizem respeito a muito de nossos usuários. A informação nesta seção é baseada em dados colhidos da lista de discussão, que é muito ativa na identificação de problemas e assim como nos relatos de tipos de uso.

Originalmente, o código vem do início dos anos 80, fornecendo um código estável e o formato de tabelas ISAM permanece compa-tível com versões anteriores. Na TcX, a predecessora daMySQLAB, oMySQLvem trabalhando sem problemas em nossos projetos desde o meio de 1996. Quando oPrograma de Banco de Dados MySQLfoi disponibilizado para um público maior, nos-sos novos usuários rapidamente encontraram algumas partes de ``código sem testes''. Desde então, cada distribuição nova teve me-nos problemas de portabilidade (mesmo com os novos recursos implementados em cada uma destas versões)

Cada distribuição doServidor MySQLfoi sendo usado, e os problemas tem ocorrido somente quando os usuários começam a usar o código das ``áreas cinzentas.'' Naturalmente, novos usuários não sabem o que são as áreas cinzentas; esta seção tenta indicar aquelas que são conhecidas atualmente. As descrições lidam com a Versão 3.23 e 4.0 doServidor MySQL. Todos os erros co-nhecidos e relatados são corrigidos na última versão, com a exceção dos bugs listados na seção de erros, os quais são relacionados ao desenho. SeeSecção 1.8.6, “Erros Conhecidos e Deficiências de Projetos no MySQL”.

OServidor MySQLé escrito em múltiplas camadas com módulos independentes. Alguns dos novos módulos estão listados abaixo com indicações de quão bem-testado foi cada um deles.

Replicação --- Gamma

Grandes grupos de servidores usando replicação estão em uso, com bom resultados. O trabalho no aprimoramento dos recursos de replicação continua noMySQL4.x.

(22)

O mecanismo de armazenamento transacionalInnoDBfoi declarado estável na árvore doMySQL3.23, a partir da versão 3.23.49.InnoDBtem sido usado em sistema de produção grandes e com carga pesada.

TabelasBDB--- Gamma

O código doBerkeley DBé muito estável, mas ainda estamos melhorando a interface do mecanismo de armazenamento transacional doBDBnoServidor MySQL, assim levará algum tempo até que ele esteja tão bem testado quanto os outro tipos de tabela.

Pesquisas Full-text --- Beta

Pesquisa full-text funcionam mas ainda não são largamente usadas. Melhoramentos importantes forma implementados no

MySQL4.0.

MyODBC 3.51(usa ODBC SDK 3.51) --- Estável

Em grande uso na produção. Alguns problemas apresentados parecem ser relacionados a aplicação e independente do driver ODBC ou do servidor de banco de dados.

Recuperação automática de tabelasMyISAM--- Gamma

Este status se aplica apenas ao novo código que confere no mecanismo de armazenamentoMyISAMque verifica, na inicializa-ção, se a tabela foi fechada corretamente e executa uma conferência/reparo automático da tabela em caso negativo.

Bulk-insert --- Alpha

Novo recurso nas tabelasMyISAMnoMySQL4.0 para inserções mais rápidas de vários registros. • Locking --- Gamma

Esse módulo é muito dependente do sistema. Em alguns sistemas existem certos problemas por utilizar o locking padrão do SO (fcntl(). Nestes casos, você deve executar omysqldcom o parâmetro--skip-external-locking. São conhecidos alguns problemas ocorridos em alguns sistemas Linux e no SunOS quando utiliza-se sistemas de arquivos montados em NFS.

Clientes que pagam recebem suporte direto e de alta qualidade da MySQL AB. A MySQL AB também fornece uma lista de discus-são como um recurso da comunidade onde qualquer pessoa pode tirar suas dúvidas.

Erros são normalmente corrigidos com um patch; para erros sérios, normalmente é lançada uma nova distribuição.

1.2.4. Qual o Tamanho Que as Tabelas do MySQL Podem Ter?

A Versão 3.22 doMySQLtem suporte para tabelas com limite de tamanho até 4G. Com o novoMyISAMnoMySQLversão 3.23 o tamanho máximo foi expandido até 8 milhões de terabytes (2 ^ 63 bytes). Com este tamanho de tabela maior permitido, o tamanho máximo efetivo das tabelas para o banco de dadosMySQLé normalmente limitado pelas restrições do sistema operacional quanto ao tamanho dos arquivos, não mais por limites internos do MySQL.

A seguinte tabela lista alguns exemplos do limite do tamanho de arquivos do sistema operacional:

Sistema Operacional Limite do tamanho do arquivo

Linux-Intel 32 bit 2G, muito mais usando LFS

Linux-Alpha 8T (?)

Solaris 2.5.1 2G (É possível 4GB com patch) Solaris 2.6 4G (pode ser alterado com parâmetro)

Solaris 2.7 Intel 4G

Solaris 2.7 ULTRA-SPARC 8T (?)

No Linux 2.2 você pode ter tabelas maiores que 2 GB usando o patch LFS para o sistema de arquivos ext2. No Linux 2.4 já existem patches para o sistema de arquivos ReiserFS para ter suporte a arquivos maiores. A maioria das distribuições atuais são baseadas no kernel 2.4 e já incluem todos os patches Suporte a Arquivos Grandes (Large File Support - LFS) exigidos. No entanto, o tamanho máximo disponível ainda depende de diversos fatores, sendo um deles o sistema de arquivos usado para armazenar as tabelas MySQL.

Para um visão mais detalhada sobre LFS no Linux, dê uma olha na página Andreas Jaeger's "Large File Support in Linux" em

(23)

Por padrão, oMySQLcria tabelasMyISAMcom uma estrutura interna que permite um tamanho máximo em torno de 4G. Você po-de verificar o tamanho máximo da tabela com o comandoSHOW TABLE STATUSou com omyisamchk -dv nome_tabela

SeeSecção 4.6.8, “Sintaxe deSHOW”.

Se você precisa de tabelas maiores que 4G (e seu sistema operacional suporta arquivos grandes), a instruçãoCREATE TABLE per-mite as opçõesAVG_ROW_LENGHTeMAX_ROWS. Use estas opções para criar uma tabela que possa ter mais de 4GB. See Sec-ção 6.5.3, “SintaxeCREATE TABLE”. Você pode também alterar isso mais tarde comALTER TABLE. SeeSecção 6.5.4, “Sintaxe

ALTER TABLE”.

Outros modos se contornar o limite do tamanho do arquivo das tabelasMyISAMsão os seguintes:

• Se sua tabela grande será somente leitura, você poderá usar omyisampackpara unir e comprimir várias tabelas em uma. my-sisampacknormalmente comprime uma tabela em pelo menos 50%, portanto você pode obter, com isso, tabelas muito maio-res. SeeSecção 4.8.4, “myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL”.

• Outra opção para contornar o limite de tamanho de arquivos do sistema operacional para arquivos de dadosMyISAMusando a opçãoRAID. SeeSecção 6.5.3, “SintaxeCREATE TABLE”.

• OMySQLincluí uma bibliotecaMERGEque permite acessar uma coleção de tabelas idênticas como se fosse apenas uma. See

Secção 7.2, “TabelasMERGE”.

1.2.5. Compatibilidade Com o Ano 2000 (Y2K)

OServidor MySQLnão apresenta nenhum problema com o ano 2000 (Y2K compatível)

• OServidor MySQLusa funções de tempo Unix que tratam datas até o ano2037para valoresTIMESTAMP; para valores

DATEeDATETIME, datas até o ano 9999 são aceitas.

• Todas as funções de data doMySQLestão no arquivosql/time.cce codificadas com muito cuidado para ser compatível com o ano 2000.

• NoMySQLversão 3.22 e posterior, o novo tipo de campoYEARpode armazenar anos0e1901até2155em 1 byte e mostrá-lo usando 2 ou 4 dígitos. Todos os anos de 2 dígitos são considerados estar na faixa de1970até2069; o que significa que se você armazenar01em uma colunaYEAR, OServidor MySQLo tratará como2001.

O seguinte demonstração simples ilustra que oMySQL Servernão tem nenhum problema com datas até depois do ano 2030:

mysql> DROP TABLE IF EXISTS y2k;

Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE y2k (date DATE,

-> date_time DATETIME,

-> time_stamp TIMESTAMP);

Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO y2k VALUES

-> ("1998-12-31","1998-12-31 23:59:59",19981231235959), -> ("1999-01-01","1999-01-01 00:00:00",19990101000000), -> ("1999-09-09","1999-09-09 23:59:59",19990909235959), -> ("2000-01-01","2000-01-01 00:00:00",20000101000000), -> ("2000-02-28","2000-02-28 00:00:00",20000228000000), -> ("2000-02-29","2000-02-29 00:00:00",20000229000000), -> ("2000-03-01","2000-03-01 00:00:00",20000301000000), -> ("2000-12-31","2000-12-31 23:59:59",20001231235959), -> ("2001-01-01","2001-01-01 00:00:00",20010101000000), -> ("2004-12-31","2004-12-31 23:59:59",20041231235959), -> ("2005-01-01","2005-01-01 00:00:00",20050101000000), -> ("2030-01-01","2030-01-01 00:00:00",20300101000000), -> ("2050-01-01","2050-01-01 00:00:00",20500101000000);

Query OK, 13 rows affected (0.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM y2k;

+---+---+---+ | date | date_time | time_stamp | +---+---+---+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |

Referências

Documentos relacionados

Toda MDP de 15mm de grosor, pintura UV, puerta basculante con pistón a gas, correderas metálicas, patas y tiradores en plástico, vidrio cristal templado 3mm.. $3.094 Dakota Brilho

Se você tiver algum dos protocolos de datagrama (UDP/IP ou IPX) listados aqui, clique para selecionar e clique em Remover.Se você não tiver nenhum dos protocolos orientados a conexão

Essa dimensão é composta pelos conceitos que permitem refletir sobre a origem e a dinâmica de transformação nas representações e práticas sociais que se relacionam com as

O profeta que se dispôs para fugir da presença do Senhor, agora, encurralado por Deus, depois de três dias e três noites no ventre do grande peixe, se entrega a

Agora que você conheceu dez dicas infalíveis para se tornar uma mulher irresistível e sedutora, chega o momento de compreender quais são as três atitudes principais que não fazem

Já um tanque com a torneira meio aberta por 15 minutos pode chegar a gastar 279 litros de água.. Por isso, o melhor é deixar acumular roupa, colocar a água no tanque

Meia Argola Pérolas Formato Coração 526653 3,7 cm de Diâmetro 24 Pérolas Sintéticas Pendant Letra com Pérolas 542348 Pérolas Sintéticas. Presente

MAS A DONA BARATINHA SE ASSUSTOU MUITO COM O BARULHÃO DELE E DISSE: – NÃO, NÃO, NÃO, NÃO QUERO VOCÊ, NÃO, VOCÊ FAZ MUITO BARULHÃO!. E O CACHORRO