Menjejaki Perubahan Rekod dalam MySQL Menggunakan Jadual Sejarah dan Pencetus
MySQL menyediakan beberapa pilihan untuk menjejaki perubahan yang dibuat pada rekod dalam pangkalan data. Satu pendekatan yang berkesan ialah mencipta jadual sejarah untuk setiap jadual data sasaran. Jadual sejarah ini akan menyimpan semua operasi sisipan, kemas kini dan pemadaman yang dilakukan pada setiap baris dalam jadual asal.
Mencipta Jadual Sejarah
Untuk mencipta jadual sejarah, anda boleh menggunakan pertanyaan SQL berikut, menggantikan 'MyDB.data' dengan nama jadual data yang anda ingin jejak dan 'primary_key_column' dengan nama utamanya lajur kunci:
CREATE TABLE MyDB.data_history LIKE MyDB.data; ALTER TABLE MyDB.data_history MODIFY COLUMN primary_key_column int(11) NOT NULL, DROP PRIMARY KEY, ENGINE = MyISAM, ADD action VARCHAR(8) DEFAULT 'insert' FIRST, ADD revision INT(6) NOT NULL AUTO_INCREMENT AFTER action, ADD dt_datetime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER revision, ADD PRIMARY KEY (primary_key_column, revision);
Menggunakan Pencetus untuk Menangkap Perubahan
Selepas mencipta jadual sejarah, anda boleh menyediakan pencetus untuk log perubahan secara automatik ke jadual data asal. Untuk operasi memasukkan, mengemas kini dan memadam, pencetus berikut boleh digunakan:
CREATE TRIGGER MyDB.data__ai AFTER INSERT ON MyDB.data FOR EACH ROW INSERT INTO MyDB.data_history SELECT 'insert', NULL, NOW(), d.* FROM MyDB.data AS d WHERE d.primary_key_column = NEW.primary_key_column; CREATE TRIGGER MyDB.data__au AFTER UPDATE ON MyDB.data FOR EACH ROW INSERT INTO MyDB.data_history SELECT 'update', NULL, NOW(), d.* FROM MyDB.data AS d WHERE d.primary_key_column = NEW.primary_key_column; CREATE TRIGGER MyDB.data__bd BEFORE DELETE ON MyDB.data FOR EACH ROW INSERT INTO MyDB.data_history SELECT 'delete', NULL, NOW(), d.* FROM MyDB.data AS d WHERE d.primary_key_column = OLD.primary_key_column;
Contoh Jadual Sejarah
Jadual sejarah akan menangkap semua perubahan yang dibuat pada jadual data asal. Contohnya, diberikan jadual data dengan lajur 'ID' sebagai kunci utama, entri jadual sejarah berikut mungkin dihasilkan:
ID revision action data columns.. 1 1 'insert' .... initial entry for row where ID = 1 1 2 'update' .... changes made to row where ID = 1 2 1 'insert' .... initial entry, ID = 2 3 1 'insert' .... initial entry, ID = 3 1 3 'update' .... more changes made to row where ID = 1 3 2 'update' .... changes made to row where ID = 3 2 2 'delete' .... deletion of row where ID = 2
Melihat Perubahan
Untuk melihat perubahan yang dibuat pada lajur tertentu, anda boleh menyertai jadual sejarah dengan dirinya sendiri pada kunci utama dan lajur semakan dan menggunakan pernyataan SQL yang sesuai untuk membandingkan sebelumnya dan semasa. nilai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjejaki Perubahan Rekod dalam MySQL Menggunakan Jadual Sejarah dan Pencetus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!