No rodapé da minha página, gostaria de adicionar algo como "última atualização do xx / xx / 200x", sendo esta data a última vez que uma determinada tabela do mySQL foi atualizada.
Qual o melhor jeito pra fazer isso? Existe uma função para recuperar a última data atualizada? Devo acessar o banco de dados toda vez que precisar desse valor?
Respostas:
Nas versões posteriores do MySQL, você pode usar o
information_schema
banco de dados para informar quando outra tabela foi atualizada:Obviamente, isso significa abrir uma conexão com o banco de dados.
Uma opção alternativa seria "tocar" em um arquivo específico sempre que a tabela MySQL for atualizada:
Em atualizações de banco de dados:
O_RDRW
modoclose
isso de novoou alternativamente
touch()
, o equivalente PHP dautimes()
função, para alterar o registro de data e hora do arquivo.Na exibição da página:
stat()
para ler novamente a hora da modificação do arquivo.fonte
show table status
usosinformation_schema.tables
)UPDATE_TIME
método e oshow table status
método abaixo estão disponíveis apenas no mecanismo MyISAM, não no InnoDB. Embora isso esteja listado como um bug , é mencionado na Referência do MySQL 5.5 , que também diz que ofile_per_table
modo é um indicador não confiável do tempo de modificação.Eu não tenho banco de dados information_schema, usando o mysql versão 4.1.16, portanto, neste caso, você pode consultar isso:
Ele retornará estas colunas:
Como você pode ver, existe uma coluna chamada: " Update_time " que mostra o último horário de atualização para sua tabela .
fonte
Estou surpreso que ninguém tenha sugerido acompanhar o tempo da última atualização por linha:
Isso atualiza o carimbo de data / hora, mesmo que não o tenhamos mencionado em UPDATE.
Agora você pode consultar o MAX ():
É certo que isso requer mais armazenamento (4 bytes por linha para TIMESTAMP).
Mas isso funciona para tabelas do InnoDB anteriores à versão 5.7.15 do MySQL, o que
INFORMATION_SCHEMA.TABLES.UPDATE_TIME
não acontece.fonte
A coisa mais simples seria verificar o registro de data e hora dos arquivos da tabela no disco. Por exemplo, você pode verificar no seu diretório de dados
Isso deve fornecer a lista de todas as tabelas com a tabela na última vez em que foi modificada pela última vez.
fonte
Para uma lista de alterações recentes na tabela, use este:
fonte
UPDATE_TIME
são nulos? Qualquer ideia?Eu criaria um gatilho que captura todas as atualizações / inserções / exclusões e grava timestamp na tabela personalizada, algo como tablename | timestamp
Só porque eu não gosto da ideia de ler diretamente as tabelas internas do sistema do servidor db
fonte
UPDATE_TIME
coluna como no MySQL.Embora exista uma resposta aceita, não acho que seja a correta. É a maneira mais simples de conseguir o que é necessário, mas mesmo se já estiver ativado no InnoDB (na verdade, os documentos dizem que você ainda deve receber NULL ...), se você ler os documentos do MySQL , mesmo na versão atual (8.0), usando UPDATE_TIME é Não é a opção certa, porque:
Se eu entendi corretamente (não é possível verificá-lo em um servidor no momento), o carimbo de data e hora é redefinido após a reinicialização do servidor.
Quanto às soluções reais (e, bem, caras), você tem a solução de Bill Karwin com CURRENT_TIMESTAMP e eu gostaria de propor uma solução diferente, baseada em gatilhos (estou usando essa).
Você começa criando uma tabela separada (ou talvez você tenha alguma outra tabela que possa ser usada para essa finalidade) que funcionará como um armazenamento para variáveis globais (aqui registros de data e hora). Você precisa armazenar dois campos - nome da tabela (ou qualquer valor que você queira manter aqui como ID da tabela) e carimbo de data e hora. Depois de ter, você deve inicializá-lo com este ID de tabela + data de início (NOW () é uma boa opção :)).
Agora, você passa para as tabelas que deseja observar e adiciona gatilhos APÓS INSERT / UPDATE / DELETE com este ou outro procedimento semelhante:
fonte
Análise no nível do SO:
Encontre onde o banco de dados está armazenado no disco:
Verifique as modificações mais recentes
Deve funcionar em todos os tipos de banco de dados.
fonte
Basta pegar a data do arquivo modificado no sistema de arquivos. Na minha língua isso é:
Resultado:
fonte
Se você estiver executando o Linux, poderá usar o inotify para consultar a tabela ou o diretório do banco de dados. O inotify está disponível no PHP, node.js, perl e suspeito da maioria das outras linguagens. É claro que você deve ter instalado o inotify ou seu provedor de serviços de Internet o instalou. Um monte de ISP não vai.
fonte
Não tenho certeza se isso seria de algum interesse. Usar o mysqlproxy entre o mysql e os clientes e usar um script lua para atualizar um valor-chave no memcached de acordo com as mudanças interessantes na tabela UPDATE, DELETE, INSERT foi a solução que eu fiz recentemente. Se o wrapper suportasse ganchos ou gatilhos no php, isso poderia ter sido muito bom. Nenhum dos wrappers a partir de agora faz isso.
fonte
Eu criei uma coluna pelo nome: update-at no phpMyAdmin e recebi a hora atual do método Date () no meu código (nodejs). com todas as alterações na tabela, essa coluna mantém o horário das alterações.
fonte
a) Mostrará todas as tabelas e as datas da última atualização
então, você pode solicitar ainda uma tabela específica:
b) Como nos exemplos acima, você não pode usar a classificação em 'Update_time', mas usando SELECT, você pode:
para perguntar mais sobre determinada tabela:
fonte
Foi isso que fiz, espero que ajude.
fonte
Coloque em cache a consulta em uma variável global quando ela não estiver disponível.
Crie uma página da Web para forçar o recarregamento do cache quando você o atualizar.
Adicione uma chamada à página de recarga em seus scripts de implantação.
fonte