Di bagian bawah halaman saya, saya ingin menambahkan sesuatu seperti "terakhir diperbarui xx / xx / 200x" dengan tanggal ini menjadi yang terakhir kali tabel mySQL tertentu telah diperbarui.
Apa cara terbaik untuk melakukannya? Apakah ada fungsi untuk mengambil tanggal yang terakhir diperbarui? Haruskah saya mengakses ke database setiap kali saya membutuhkan nilai ini?
Jawaban:
Di versi MySQL yang lebih baru, Anda dapat menggunakan
information_schema
database untuk memberi tahu Anda ketika tabel lain diperbarui:Ini tentu saja berarti membuka koneksi ke database.
Opsi alternatif adalah "menyentuh" file tertentu setiap kali tabel MySQL diperbarui:
Tentang pembaruan basis data:
O_RDRW
modeclose
lagiatau sebagai alternatif
touch()
, fungsi yang setara dengan PHPutimes()
, untuk mengubah stempel waktu file.Pada tampilan halaman:
stat()
untuk membaca kembali waktu modifikasi file.sumber
show table status
menggunakaninformation_schema.tables
)UPDATE_TIME
metode danshow table status
metode di bawah ini hanya tersedia dengan mesin MyISAM, tidak InnoDB. Meskipun ini terdaftar sebagai bug , disebutkan dalam Referensi MySQL 5.5 , yang juga mengatakan bahwafile_per_table
mode adalah indikator waktu modifikasi yang tidak dapat diandalkan.Saya tidak memiliki database information_schema, menggunakan mysql versi 4.1.16, jadi dalam hal ini Anda dapat menanyakan ini:
Ini akan mengembalikan kolom ini:
Seperti yang Anda lihat ada kolom bernama: " Update_time " yang menunjukkan Anda waktu pembaruan terakhir untuk your_table .
sumber
Saya terkejut tidak ada yang menyarankan pelacakan waktu pembaruan terakhir per baris:
Ini memperbarui cap waktu meskipun kami tidak menyebutkannya di UPDATE.
Sekarang Anda dapat meminta MAX ():
Harus diakui, ini membutuhkan lebih banyak penyimpanan (4 byte per baris untuk TIMESTAMP).
Tapi ini bekerja untuk tabel InnoDB sebelum versi 5.7.15 MySQL, yang
INFORMATION_SCHEMA.TABLES.UPDATE_TIME
tidak.sumber
Hal paling sederhana adalah memeriksa cap waktu file tabel pada disk. Misalnya, Anda dapat memeriksa di bawah direktori data Anda
Ini akan memberi Anda daftar semua tabel dengan tabel saat terakhir kali diubah, yang tertua.
sumber
Untuk daftar perubahan tabel terbaru gunakan ini:
sumber
UPDATE_TIME
nol? Ada ide?Saya akan membuat pemicu yang menangkap semua pembaruan / memasukkan / menghapus dan menulis stempel waktu di tabel kustom, seperti tablename | cap waktu
Hanya karena saya tidak suka ide untuk membaca tabel sistem internal server db secara langsung
sumber
UPDATE_TIME
kolom seperti di MySQL.Meskipun ada jawaban yang diterima saya tidak merasa itu adalah jawaban yang tepat. Ini adalah cara paling sederhana untuk mencapai apa yang dibutuhkan, tetapi bahkan jika sudah diaktifkan di InnoDB (sebenarnya dokumen memberi tahu Anda bahwa Anda masih harus mendapatkan NULL ...), jika Anda membaca dokumen MySQL , bahkan dalam versi saat ini (8.0) menggunakan UPDATE_TIME adalah bukan opsi yang tepat, karena:
Jika saya mengerti dengan benar (tidak dapat memverifikasinya di server sekarang), timestamp akan diatur ulang setelah server restart.
Adapun solusi nyata (dan, juga, mahal), Anda memiliki Bill Karwin solusi dengan CURRENT_TIMESTAMP dan saya ingin mengusulkan satu yang berbeda, yang didasarkan pada pemicu (Saya menggunakan yang satu).
Anda mulai dengan membuat tabel terpisah (atau mungkin Anda memiliki beberapa tabel lain yang dapat digunakan untuk tujuan ini) yang akan berfungsi seperti penyimpanan untuk variabel global (di sini cap waktu). Anda perlu menyimpan dua bidang - nama tabel (atau nilai apa pun yang ingin Anda simpan di sini sebagai id tabel) dan cap waktu. Setelah Anda memilikinya, Anda harus menginisialisasi dengan tabel ini id + tanggal mulai (SEKARANG () adalah pilihan yang baik :)).
Sekarang, Anda pindah ke tabel yang ingin Anda amati dan tambahkan pemicu SETELAH INSERT / UPDATE / HAPUS dengan prosedur ini atau yang serupa:
sumber
Analisis tingkat OS:
Temukan tempat DB disimpan di disk:
Periksa modifikasi terbaru
Harus bekerja pada semua tipe database.
sumber
Hanya ambil tanggal file yang diubah dari sistem file. Dalam bahasa saya itu adalah:
Keluaran:
sumber
Jika Anda menjalankan Linux, Anda dapat menggunakan inotify untuk melihat tabel atau direktori database. inotify tersedia dari PHP, node.js, perl dan saya menduga sebagian besar bahasa lain. Tentu saja Anda harus menginstal inotify atau ISP Anda menginstalnya. Banyak ISP tidak mau.
sumber
Tidak yakin apakah ini menarik. Menggunakan mysqlproxy di antara mysql dan klien, dan memanfaatkan skrip lua untuk memperbarui nilai kunci dalam memcached menurut perubahan tabel yang menarik UPDATE, DELETE, INSERT adalah solusi yang saya lakukan baru-baru ini. Jika bungkus mendukung pengait atau pemicu di php, ini bisa jadi lebih mudah. Tak satu pun dari pembungkus saat ini melakukan ini.
sumber
saya membuat kolom dengan nama: update-at di phpMyAdmin dan mendapatkan waktu saat ini dari metode Date () dalam kode saya (nodejs). dengan setiap perubahan dalam tabel, kolom ini menampung waktu perubahan.
sumber
a) Ini akan menampilkan semua tabel dan ada tanggal pembaruan terakhir
kemudian, Anda selanjutnya dapat meminta tabel spesifik:
b) Seperti dalam contoh di atas Anda tidak dapat menggunakan pengurutan pada 'Update_time' tetapi menggunakan SELECT Anda dapat:
untuk bertanya lebih lanjut tentang tabel tertentu:
sumber
Inilah yang saya lakukan, saya harap ini membantu.
sumber
Tembolok kueri dalam variabel global saat itu tidak tersedia.
Buat halaman web untuk memaksa cache dimuat ulang saat Anda memperbaruinya.
Tambahkan panggilan ke halaman reload ke skrip penerapan Anda.
sumber