[MySQL] – Série de posts 3: Tipos de dados (Data Types)
Bom Pessoal , neste post vou falar sobre os tipos de dados suportados pelo MySQL e suas derivações. Quando falamos em tipos de dados , isso está inteiramente ligado a normalização e criação das tabelas do seu esquema(Schema) ou banco de dados(database). Precisamos entender como nosso SGBD trabalha ao efetuar o armazenamento de dados de diferentes tipos, sendo eles do Tipo “Texto”, “Numérico” e “Temporal”. O MySQL para isso suporta diferentes tipos de dados(data types) para atender nossa necessidade , quando vamos utiliza-las , esses tipos de dados são divididos em 3 categorias:
* Dados de Tipo “Texto”
* Dados de Tipo “Numérico”
* Dados de Tipo “Temporal”
——————————————————————————————-——————–
Veja abaixo um breve detalhamento dos tipos de dados:
Dados do Tipo “Texto”
Na tabela abaixo, vou demonstrar os tipos de dados “Texto” não-binário suportado pelo MySQL
Para dados do Tipo Texto temos que entender , qual tipo se encaixa melhor para a coluna da tabela que criaremos. No caso de armazenarmos uma coluna “nome_completo” do tipo varchar(60), já seria o suficiente para esse tipo de informação. Por isso temos que saber o quanto será necessário para armazenar um determinado tipo de informação de acordo com os tipos de dados suportados pelo nosso SGBD.
Veja na tabela abaixo, os tipos de dados “Texto” binário suportado pelo MySQL
Para utilizarmos esses tipo de dados, precisamos conhecer a necessidade de armazenamento da informação em formato binário no MySQL. No Caso de um cadastro de produto que precisa armazenar uma foto do produto, criaremos em nossa tabela uma coluna do tipo Blob para armazenar uma imagem em formato binário.
Veja na tabela abaixo , que também podemos armazenar dados do tipo “Texto” em formato de lista
Para utilizar esse tipo de dados , dependendo da aplicação podemos fornecer uma lista com o nome dos estados do Brasil ao invés de cadastrar essa informação em linhas na nossa tabela. Com a utilização deste tipo de dados , podemos validar informações com listas diretamente no MySQL.
Dados do Tipo “Numérico”
Veja na tabela abaixo, os tipos de dados numéricos inteiros, suportados pelo MySQL
Quando você cria uma coluna usando um dos tipos inteiros , o MySQL alocará uma quantidade de espaço apropriado para armazenar os dados, variando de um byte para um tinyint até oito bytes para um bigint. Portanto, você deve tentar escolher um tipo que seja grande o suficiente para armazenar o maior número previsto para a coluna sem desperdiçar espaço de armazenamento de forma desnecessária. Também vale lembrar que caso você não deseje armazenar números inteiros com sinal ou negativos, você terá que informar que os dados que serão gravados nessa coluna são inteiros positivos e sem sinal(unsigned). Exemplo create table teste (i int unsigned);
Também possuímos alguns sinonimos para o tipo BIT e BOOLEAN:
Estes são sinônimos para
até a versão MySQL 5.0.3, após essa versão o BIT não é mais sinônimo para TINYINT.
Veja na tabela abaixo, os tipos de dados numéricos de ponto flutuante e ponto fixo:
Ao usar um tipo de ponto flutuante , você pode especificar uma precisão (o numero total de dígitos permitidos tanto à esquerda quanto à direita do ponto decimal) e uma escala ( o numero de dígitos permitidos à direita do ponto decimal). Mais isso não é obrigatório. Se você especificar uma precisão e uma escala para sua coluna de ponto flutuante, lembre de que os dados armazenados na coluna serão arredondados se o numero de dígitos exceder a escala e/ou a precisão da coluna. Por exemplo uma coluna definida como float(4,2) armazenará um total de quatro dígitos, dois à esquerda e dois à direita do ponto decimal. Portanto , uma coluna desse tipo traria os numeros 24.77 e 8.19 sem problema, mais o numero 17.8675 seria arredondado para 17.86 e a tentativa de armazenar o numero 178.357 na sua coluna float(4,2) geraria um erro.
Também possuímos sinônimos para dados numéricos de ponto fixo, representados por “DEC(p,e)” , “NUMERIC(p,e)” e “FIXED(p,e)” fazendo referência ao tipo DECIMAL.
Dados do tipo “Temporal”
Veja na tabela abaixo , os tipos de dados temporais suportados:
Além de strings e números , muito provavelmente você também se verá trabalhando com datas e/ou horários. Esse tipo de dados é conhecido como temporal , e alguns exemplos de dados temporais em um banco de dados incluem:
* A data futura em que se espera a ocorrência de um evento específico , como o envio de pedido de um cliente.
* A data em que um pedido de um cliente foi enviado.
* A data de nascimento de um funcionário.
* A data e o horário em que um usuário modificou uma linha em particular em uma tabela.
Como vocês perceberam na o MySQL inclui tipos de dados que tratam todas essas situações exemplificadas acima.
Apesar de os servidores de banco de dados armazenarem dados temporais de diversas maneiras, o propósito da string de “formato padrão”(na tabela acima demonstrando os dados temporais) é mostrar como os dados serão representados quando retornados, junto com a forma em que uma string de data deve ser construída ao inserir ou atualizar uma coluna temporal.
Bom essa foi uma breve abordagem sobre os tipos de dados suportados pelo MySQL. Abaixo segue os links dos arquivos utilizados para formular este post.
Fonte:
http://dev.mysql.com/doc/refman/5.5/en/data-type-overview.html
http://www.devshed.com/c/a/MySQL/MySQL-Data-and-Table-Types-62908/
http://imasters.com.br/artigo/9196/mysql/tipos-de-dados-do-mysql-50
http://www.samueldiasneto.com/mysql/tipos.html
http://xoops.net.br/docs/mysql/manual/ch06s02.php#.UELaSyJmO3q
Galera recomendo fortemente , que possam ler os artigos dos links acima para poder ter um entendimento melhor e complementar ao que foi proposto neste post. Qualquer dúvida quanto ao post acima estarei ao dispor para sana-lá. Que a Graça e Paz estejam com todos vocês.
Veja o post anterior desta série abaixo:
https://cooperati.com.br/2012/08/27/mysql-srie-de-posts-2-conectando-ao-servidor-mysql-via-prompt-de-comando/
Olá Emerson,
Muito bom seu post,gostei muito.Estou com dúvidas sobre o mysql em relação ao backup.
No momento to fazendo backup por script na cron do sistema ficando assim: parando o banco mysql e fazendo copia do diretório /var/lib/mysql e gerando arquivo compactado.
Essa é a melhor maneira ? consigo realizar a restauração numa boa?
Obrigado
Opa Fernando,
Obrigado pela consideração. Mais respondendo a sua pergunta , temos que avaliar a criticidade da sua aplicação que utiliza o MySQL. Pois se você tem um ambiente de alta disponibilidade e precisa sempre reter os seus dados mais atualizados durante um período de 24 horas , o ideal é possui uma rotina da backup que faça o backup das suas bases de dados por exemplo:
Rotina de backup madrugada: 00:00 horas
Rotina de backup manhã: 06:00 horas
Rotina de backup tarde: 12:00 horas
Rotina de backup noite: 18:00 horas
E a rotina de backup ideal para o MySQL é o backup lógico utilizando o utilitário de backup mysqldump , assim garantindo que o seu backup retenha seus dados durante um período e utilizando ele em conjunto com os logs binários, pois estes logs retém as ultimas transações efetuadas pelo mysql.
O backup que você utiliza hoje funciona bem , mais pode ficar preso a versão do MySQL que você utiliza atualmente. Este tipo de rotina não é muito indicado, pois funciona como um snapshot da base no momento em que foi efetuado o backup, também chamado de backup frio(cold backup). Exemplificando um problema , imagine se seu backup está sendo efetuado todo dia de madrugada e seu backup está sendo armazenado no compartilhamento do seu storage corretamente utilizando a estratégia de backup frio e seu Servidor MySQL morre(queima o HD) no meio do expediente as 15:00 horas da tarde. Todo o seu dia de trabalho efetuado na sua aplicação até as 15:00 foi perdido , pois seu ultimo backup foi efetuado as 00:00 horas da noite. Por esse motivo recomendo backup lógico, pois dependendo do tamanho das suas base de dados , você consegue reter um numero de backup que pode evitar transtornos em caso de sinistros.
Caso queira uma ajuda para formular sua rotina de backup estarei a dispor.
Obrigado pela a sua explicação e paciência Emerson.o Mysql aki roda com aplicações de sites (Joomla e WordPress) e não são serviços com informações criticas. Como seria esse script?
ou posso continuar dessa maneira?
Muito obrigado Emerson.
Fernando , vou criar um Post sobre backup de Banco de dados do MySQL utilizando linux. Essa semana eu posto.
OK, Muito obrigado estarei aguardando anciosamente..rsrs
Valeu!!!