Curiosidades sobre campo TIMESTAMP em MySQL

Banco de dados é uma área que nunca se esgotam os conhecimentos…recentemente descobri algumas coisas interessantes sobre os campos do tipo TIMESTAMP utilizando o  MySQL:

  • Por default o TIMESTAMP é NOT NULL, inserir um NULL faz com que seja armazenado o DATETIME atual;
  • TIMESTAMP pode conter um valor entre ‘1970-01-01 00:00:01’ e ‘2038-01-19 03:14:07’;
  • Somente a primeira coluna com NOT NULL pode contar por default a propriedade CURRENT_TIMESTAMP;
  • Quando se utiliza CURRENT_TIMESTAMP, e a coluna esteja marcada como ON UPDATE essa coluna não se atualiza-ra se não tiver alterações significativas (por exemplo, ao fazer dois updates iguais).

Confira mais aqui:

Turning Mysql – Acelerando as consultas

Muitas vezes desenvolvedores tem procurado maneiras de acelerar a manipulação de dados, principalmente consultas, para isso pode-se habilitar o uso de query_cache, que com certeza acelera o desempenho de consultas.

Como a velocidade é o elemento mais importante no desenvolvimento de um site, especialmente para aqueles de alto tráfego de dados, acelerar buscas utilizando o cache é fundamental.

Para isso é necessário alterar algumas variávis nos arquivos de configuração do Mysql (my.cnf ou my.ini dependendo do seu sistema operacional)

1. Sete a variável query_cache_type para o valor 1. (Existem 3 possibilidades:  0 (disabilitado / off), 1 (habilitado / on) and 2 (sob demanda).

query-cache-type = 1

2. Define query_cache_size para o tamanho esperado. Eu prefiro a defini-lo em 20MB.

query-cache-size = 20M query-cache-size = 20M

Se você definiu a variável query-cache-type = 2 (sob demanda), você terá que modificar suas querys SQL para que suporte cache.

SELECT SQL_CACHE field1, field2 FROM table1 WHERE field3 = ‘yes’ SQL_CACHE SELECT campo1, campo2 FROM tabela1 WHERE campo3 = ‘sim’

Para verificar se o seu servidor mysql esta permitindo o uso de cache, simplesmente execute esta consulta:

SHOW VARIABLES LIKE ‘%query_cache%’; SHOW LIKE ‘% query_cache%’;

Você vai ver este resultado: —

——————————————————————-
| Variable_name | Value | | Variable_name | Valor |
——————————————————————-
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_size | 20971520 |
| query_cache_type | ON |
——————————————————————-
4 rows in set (0.06 sec)

Para verificar se o MySQL está funcionando, basta efetuar uma consulta SQL 2 vezes e verificar a variável cache:

SHOW STATUS LIKE ‘%qcache%’; SHOW STATUS LIKE ‘% qcache%’;

——————————————————————-
| Variable_name | Value | | Variable_name | Valor |
——————————————————————-
| Qcache_queries_in_cache | 1 |
| Qcache_inserts | 3 |
| Qcache_hits | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 2 |
| Qcache_free_memory | 20947592 |
| Qcache_free_blocks | 1 |
| Qcache_total_blocks | 4 |
——————————————————————-

A primeira vez que você executar o sua query SQL, deverá levar mais tempo, e se compararmos com com uma segunda vez o tempo de consulta será bem menor. Isto deve-se ao MySQL query cache funcionando corretamente.

Usando o Mysql para facilitar sua vida!

Este artigo foi publicado no site na comunidade php5,

Visa ajudar aos desenvolvedores a fazer as suas tarefas mais facilmente e ajudar a diminuir o tempo de desenvolvimento.

A função IN e NOT IN

Usamos IN para fazer consultas quando precisamos que seja retornado todos os registros onde em um determinado campos contenha um dos valores que serão passados no IN.

Usamos NOT IN quando queremos retornar tudo menos os resultados passados no NOT IN

Uso em String:

SELECT sigla, nome, população
FROM cidades
WHERE
Sigla IN(‘PR’, ‘SP’, ‘MG’);
//NOT IN
Sigla NOT IN(‘PR’, ‘SP’, ‘MG’);

Uso numérico:

SELECT nome, email, idade
FROM curriculos
WHERE
idade IN (18, 19, 20)
//NOT IN
idade NOT IN (15, 16, 17)

As funções IF e CASE WHEN

Usamos a função IF no MySQL com a mesma finalidade do que qualquer linguagem de programação, só que na maioria das vezes é mais fácil jogar essa verificação para o banco de dados do que para a linguagem de programação.

Sintaxe:

IF(condição, caso verdadeiro, caso contrário)

SELECT nome, email, IF(sexo =”M”, “Masculino”, “Feminino”)
FROM currículos

A função CASE WHEN:

Usamos a função CASE WHEN no MySQL com a mesma finalidade do que usamos em qualquer çinguagem de programação, so que na maioria da vezes é mais fácil jogar essa verificação para o banco de dados do que para a linguagem de programação.

Sintaxe:
CASE campo
WHEN “valor1” THEN “Novo valor”

Controle de fluxo

SELECT nome, setor
CASE mes_nascimento
WHEN 01 THEN “Janeiro”
WHEN 02 THEN “Fevereiro”
WHEN 03 THEN “Março”
WHEN 04 THEN “Abril”
WHEN 05 THEN “Maio”
WHEN 06 THEN “Junho”
WHEN 07 THEN “Julho”
WHEN 08 THEN “Agosto”
WHEN 09 THEN “Setembro”
WHEN 10 THEN “Outubro”
WHEN 11 THEN “Novembro”
ELSE “Dezembro” END AS mes_nascimento
FROM funcionários

Condições livres

SELECT
CASE
WHEN continente = “América” THEN “Continente americano”
WHEN pais = “Brasil” THEN “Continente sul americano”
WHEN continente = “Mexico” THEN “Continente norte americano”
WHEN estado = “Paraná” THEN “Região Sul”
WHEN estado = “São Paulo” THEN “Região Sudeste”

Funções matemáticas

Trigonometria
pi() = 3.14.15.93
radians(180) = 3.1415926535898
sin(radians(60)) = 0.866025
sqrt(3)/2 = 0.86602540
degrees(asin(sqrt(3)/2)) = 60

Logarítimo e potência

log(2) = 0.693147
exp(1) = 2.718282
power(2,5) = 32.000000
log10(100) = 2.000000
mod(13,7) = 6
13%7 = 6
abs(-42) = 42
sign(0) = 0

Arredondamento

ceiling(2.5) = 3
floor(2.5) = 2
round(2.5) = 2
round(2.51) = 3
truncate(2.5,0) = 2

celing para cima
floor para baixo
round para o inteiro mais próximo
truncate elimina casas decimais

Obs: todas as funções de arredondamento também funcionam para números negativos

Funções de string

concat – concatema strings; pode receber 1-n parâmetros
substring – pega partes de uma string baseado na posição
substring_index – pega partes da string baseado nos delimitadores
instr – encontra strings em outras strigns
replace – modifica strings em outras strings
length – calcula o tamanho da string
like – compara strings utilizando wildcards

substring_index(“diegohellas@hotmail.com”, “@”, 1) = diegohellas
substring_index(“orders.mysql.com”, “.”, -2) = mysql.com
reverse(“orders.mysql.com”) = moc.lqsym.sredro
upper(“mysql”) = MYSQL
lower(“MySQL”) = mysql
rpad(“Diego”, 10, “.”) = diego…..
char(77,121,83,81,76) = MySQL
left(“Diego Felipe Hellas”, 3) = Die
mid(“Diego Felipe Hellas Moreira Alves”, 13,6) = Hellas
rught(‘Diego Hellas“, 6) = Hellas
trim(“Q”, from “QQQQMySQL ABQQQ”) = MySQL AB

Funções de tempo e de data

NOW() e intervalos

SELECT NOW() – irá retornar a data e hora atual do servidor MySQL no formato
aaaa-mm-dd hh:mm:ss

SELECT NOW() + INTERVAL 2DAY – irá retornar a data e hoira do servidor, só que com uma diferença de 2 dias para frente(ex: hoje é 2006-10-07 ele irá retornar 2006-10-09), essa diferença pode ser negativa também, e o intervalo pode ser horas, minutos, segundos, dias, semanas, meses, anos, etc;

Formatando datas com o DATE_FORMAT()

Sintaxe:
DATE_FORMAT(campo, ‘formato desejado’)

Especificador Descrição
%M Nome do mês (January..December)
%W Nome do dia da semana (Sunday..Saturday)
%D Dia do mês com o sufixo em Inglês (1st, 2nd, 3rd, etc.)
%Y Ano, numérico, com 4 dígitos
%y Ano, numérico, com 2 dígitos
%a Nome do dia da semana abreviado (Sun..Sat)
%d Dia do mês, numérico (00..31)
%e Dia do mês, numérico (0..31)
%m Mês, numérico (01..12)
%c Mês, numérico (1..12)
%b Nome do mês, abreviado (Jan..Dec)
%j Dia do ano (001..366)
%H Hora (00..23)
%k Hora (0..23)
%h Hora (01..12)
%I Hora (01..12)
%l Hora (1..12)
%i Minutos, numérico (00..59)
%r Horário, 12 horas (hh:mm:ss [AP]M)
%T Horário, 24 horas (hh:mm:ss)
%S Segundos (00..59)
%s Segundos (00..59)
%p AM ou PM
%w Dia da semana (0=Domingo..6=Sábado)
%U Semana (00..53), onde Domingo é o primeiro dia da semana
%u Semana (00..53), onde Segunda é o primeiro dia da semana
%% Caractere `%’.

Exemplos de uso:

Lembrando sempre que o MySQL armazena as datas no formato aaaa-mm-dd

Para selecionar a data no formato que usamos, ou de nossa necessidade:

SELECT nome, DATE_FORMAT(data_nascimento, ‘%d/%m/%Y’) AS data
FROM funcionarios
Esse exemplo agora é muio útil, eu sempre uso quando eu tenho um formulário que tem um campo de data e essa data temque ser pesquisada no MySQL, com ela eu evito de ficar transformando a data de dd/mm/aaaa para aaaa-mm-dd

SELECT nome, departamento FROM funcionários
WHERE DATE_FORMAT(data_nascimento, ‘%d/%m/%Y’) = ‘22/11/1986’
Função DATEDIFF

Ela calcula a diferença em dias entre duas datas

SELECT DATEDIFF(‘2006-12-31’, ‘2006-01-01’) = 364

Duplicando tabelas Mysql

Howto: Como duplicar o conteúdo de uma tabela Mysql

Simples, primeiro a sintaxe do comando SQL:

# CREATE TABLE nova_tabela SELECT * FROM tabela_original

Para grandes quantidades de dados, você pode querer limitar o tamanho da nova_tabela:

# CREATE TABLE nova_tabela SELECT * FROM tabela_original WHERE field1=’value’ LIMIT 0, 10000;

Firebird – Comandos SQL úteis – Substring, Cast, Case, Like, etc

Problema: Como mostrar apenas parte dos dados de um coluna em um relatório?


SUBSTRING


Conheça o  “substring”, e como ele funciona.

A sintaxe é a seguinte:

SELECT SUBSTRING ("nome do campo"
                  FROM "coluna_inicial"
                  FOR "caracteres")
FROM "nome da tabela"

Exemplo: A máscara de estoque é de 8 dígitos, porém quero que na SQL mostre apenas os 3 últimos dígitos

SELECT SUBSTRING (codpa
                  FROM 6
                  FOR 3) AS Referencia
FROM etprocab
WHERE codemp=1

Nota: Este comando é muito útil e pode ser usado inclusive para acerto de base, quando é necessário diminuir o tamanho de alguma configuração, para isto basta combiná-lo com update


CAST


Porém a coluna irá ser mostrada grande, devido ao tamanho que foi criada, ai neste caso basta usar o “cast” para reduzir o tamanho da coluna na consulta

Exemplo:

SELECT cast(SUBSTRING (codpa
                       FROM 6
                       FOR 3) AS varchar (3)) AS REF
FROM etprocab
WHERE codemp=1

Nota: Este comando é útil, para ser usado no geral, pois neste caso iria mostrar a coluna grande no CSV e após usar o “cast” o tamanho da coluna fica limitada ao tamanho informado no comando


LIKE


Outro comando bacana é o like, que acredito que não seja novidade pra ninguém, porém mesmo assim vai a dica:

SELECT *
FROM dtclifor
WHERE insestrg LIKE '%NTO' /* Neste caso o percentual antes da palavra substitui as letras que o antecede */
  AND insestrg LIKE 'ISE%' /* Neste caso o percentual depois da palavra substitui as letras da sequencia */
  AND insestrg LIKE '%EN%' /* E entre percentuais ira retornar todos valores que contenham a consulta em qualquer parte do campo */

Mais se quiser consultar todos os registros que variam apenas um caracter, como faço?

Basta utilizar o “_” (underline) no lugar do percentual, pois neste caso ele irá considerar a variação de apenas uma casa decimal na consulta.

Exemplo:

SELECT *
FROM dtclifor
WHERE codclifor LIKE '10000_1'

CASE


E vai a dica do comando case, onde com ele é possível mostrar dados que seriam mostrados por linha, nas colunas

Exemplo:

select
sum ( case when vendedor = 1 then pretot else 0 end ) as Vendedor_1,
sum ( case when vendedor = 2 then pretot else 0 end ) as Vendedor_2,
sum ( case when vendedor = 3 then pretot else 0 end ) as Vendedor_3,
sum ( case when vendedor = 4 then pretot else 0 end ) as Vendedor_4
from vtvencor
where tipo in ('VBA', 'VBT', 'VCO')
and situacao=1
and codemp=1

Nota: Este é um exemplo simples de como usar o comando case, onde mostra o valor vendido com base na tabela vtvencor, porém não é considerado os descontos e acréscimos do cadastro da venda e mostra os valores independente da venda cadastrada ou não. É apenas para demonstrar o uso do case.


COMENTÁRIO EM COMANDOS


Outra dica útil é poder colocar comentários em comandos para isso basta entre os comentários colocar as tags “/*” para iniciar e “*/” para finalizar, com isso ao executar o comando, não será considerado o que estiver entre as tags

Exemplo:

select * from dtclifor
where codemp=1 /* Comentário qualquer de sua preferencia... */

 

 

Best Practice: Select lentas, rápidas e super-rápidas.

Infelizmente nos dedicamos tanto na hora de desenvolver, que não nos aprofundamos nas características que oferecem cada ferramenta.

E as melhores práticas entram exatamente ai. Neste primeiro post desta categoria, vamos comentar sobre o uso do comando Select em uma base de dados Mysql, que com algumas otimizações podemos ter resultados bem mais rápidos.

Busca de Palavras

/* Muito rápida */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘palavra’)

/* Rápida */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘+palavra’ IN BOOLEAN MODE)

/* Lentas */
SELECT * FROM tabela WHERE RLIKE ‘(^| +)palavra($| +)’

/* Super lenta */
SELECT * FROM tabela WHERE RLIKE ‘([[:space:]]|[[:<:]])palavra([[:space:]]|[[:>:]])’

Busca de Conteúdo

/* Muito rápida */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘palavra*’ IN BOOLEAN MODE)

/* Rápida */
SELECT * FROM tabela WHERE FIELD LIKE ‘palavra%’

/* Lentas */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘*palavra*’ IN BOOLEAN MODE)

/* Super lenta */
SELECT * FROM tabela WHERE campo LIKE ‘%palavra%’

Número de registros

/* Muito rápida */
SELECT SQL_CALC_FOUND_ROWS * FROM tabla WHERE condición LIMIT 0, 10
SELECT FOUND_ROWS()

/* Rápida */
SELECT * FROM tabela WHERE condicao LIMIT 0, 10
SELECT COUNT(chave) FROM TABELA WHERE condicao

Fonte: PHP Mysql tips

phpCodeGenerator: Códigos para seu BD automático

Depois falam que PHP não presta.

phpCodeGenerator é uma biblioteca para gerar sites inteiros através de um banco de dados.

Permite ler o banco de dados e gerar uma página web que permita criar, listar, editar, modificar e deletar os registros.

Funciona com qualquer banco de dados compatível com ADODB, como MySQL, Microsoft Access, PostgreSQL e outros.

A informação que contém um banco de dados: esquema, tabelas, campos e propriedades, é suficiente para criar algumas classes que permita criar, editar, atualizar e deletar registros. Formando assim uma base para que o desenvolvedor logo possa realizar sua aplicação web mais facilmente.

O framework phpCG permite construir aplicações PHP orientadas a objetos que são extensíveis, portáveis e escaláveis.

Link: phpCodeGenerator

Fonte: International PHP Magazine

MySQL Proxy – Otimizador de Banco de Dados

MySQL Proxy é uma aplicação, em fase inicial, que você instala entre sua aplicação e o MySQL.

Permite monitorar, analizar e transformar as comunicações. Sua flexibilidade permite um número ilimitado de usuários, balanceamento de carga, teste de falha, análise de querys, filtros e modificações de querys e muito mais.

Disponível para Linux, Mac OSX, FreeBSD, IBM AIX e Sun Solaris, isso mesmo, para Windows ainda não esta disponível por ter problemas com uma biblioteca libevent, porém em breve estará disponível também

Link: MySQL Proxy

SQL Maestro – Gerenciamento de Banco de Dados.

As ferramentas maestro é uma mão-na-roda de qualquer desenvolvedor. Permite manipular banco de dados de forma simples, e intuitiva, com uma das melhores interfaces já desenvolvidas até hoje. Abaixo segue as versões “crackware” dos respectivos front-end dos bancos mais utilizados.

  • Oracle Maestro ver.7.5.0.1 | 20 MB
  • PostgreSQL Maestro ver.7.6.0.5 | 18,8 MB
  • Firebird Maestro ver.7.7.0.1 | 16,1 MB
  • MySQL Maestro ver.7.6.0.5 | 20,5 MB
  • MS SQL Maestro ver.7.5.0.1 | 17,3 MB
  • SQLite Maestro ver.7.7.0.1 | 13 MB

Clique nas images para fazer o download

Links alternativos para fazer o download