Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengesan dan Melihat Perubahan Pangkalan Data dalam MySQL Menggunakan Pencetus dan Pandangan?

Bagaimanakah Saya Boleh Mengesan dan Melihat Perubahan Pangkalan Data dalam MySQL Menggunakan Pencetus dan Pandangan?

Patricia Arquette
Patricia Arquetteasal
2024-12-07 04:16:11964semak imbas

How Can I Track and View Database Changes in MySQL Using Triggers and Views?

Menjejaki Sejarah Perubahan Pangkalan Data dengan MySQL

Banyak sistem pangkalan data memerlukan keupayaan untuk menjejaki perubahan yang dibuat pada rekod dari semasa ke semasa. MySQL menawarkan teknik yang mudah untuk mencapai ini. Pertimbangkan jadual data bernama "data" yang anda mahu pantau untuk perubahan.

Untuk bermula, buat jadual sejarah untuk "data" dengan struktur yang sama, kecuali tiga lajur tambahan:

  • tindakan: VARCHAR(8) lalai 'masukkan'
  • semakan: INT(6) BUKAN NULL auto_increment
  • dt_datetime: TARIKH MASA BUKAN NULL lalai CURRENT_TIMESTAMP
  • Lajur ini menyimpan operasi (masukkan/kemas kini/padam), nombor jujukan, dan tarikh serta masa operasi, masing-masing.

Seterusnya, cipta pencetus untuk menangkap operasi ini dan mengisi jadual sejarah:

    Selepas Sisipkan Pencetus:
  • INSERT IN TO data_history (tindakan, semakan, dt_datetime, ...) PILIH 'masukkan', NULL, NOW(), ... FROM data WHERE ...
  • Selepas Kemas Kini Pencetus:
  • MASUKKAN KE DALAM data_history (tindakan, semakan, dt_datetime, ...) PILIH 'kemas kini', NULL, NOW(), ... FROM data WHERE ...
  • Sebelum Padam Pencetus:
  • INSERT IN TO data_history (tindakan, semakan, dt_datetime, ...) PILIH 'delete', NULL, NOW(), ... FROM data WHERE ...
  • Sekarang, semua perubahan data akan direkodkan dalam jadual "data_history". Untuk memaparkan perubahan bagi lajur tertentu merentas kemas kini, anda boleh menyertai jadual sejarah dengan dirinya sendiri pada kunci utama dan lajur jujukan:

Ini seharusnya memberikan paparan yang padat dan bersejarah bagi semua perubahan yang dibuat pada jadual "data".
CREATE VIEW data_history_changes AS
SELECT t2.dt_datetime, t2.action, t1.row_id,
IF(t1.a_column = t2.a_column, t1.a_column, t1.a_column || " to " || t2.a_column) AS a_column
FROM data_history AS t1 INNER JOIN data_history AS t2
ON t1.row_id = t2.row_id
WHERE (t1.revision = 1 AND t2.revision = 1) OR t2.revision = t1.revision + 1
ORDER BY t1.row_id ASC, t2.revision ASC

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan dan Melihat Perubahan Pangkalan Data dalam MySQL Menggunakan Pencetus dan Pandangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn