- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
MySQL How To: Use MySQL triggers to log table changes
2018.07.02 13:57
How To: Use MySQL triggers to log table changes
So you are looking for a simple way to log a history of changes to a table. There is a common practice for that, and it involves creating a logging function in your source code (maybe php) that will require you to connect to the database, and then write the values into the log table. However, I prefer using MySQL triggers for logging table changes for efficiency and simplicity.
CREATE TABLE data (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
timestamp TIMESTAMP,
data1 VARCHAR(255) NOT NULL,
data2 DECIMAL(5,2) NOT NULL
);
CREATE TABLE data (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
timestamp TIMESTAMP,
data1 VARCHAR(255) NOT NULL,
data2 DECIMAL(5,2) NOT NULL
);
The data table contains all the information pertaining to the current data values. When an action occurs (such as an insert, update, or delete) to that table we want it logged to the log table, data_log.
You will notice 2 differences between the tables.
- The id field has the nonunique index rather than being a primary key. This allows multiple rows per id value as primary keys are required to be unique values.
- It contains an action field to indicate which type of MySQL statement was executed.
To ensure that changes to the data table are logged to the data_log table, we need to create a set of triggers. The triggers need to adhere to the following rules:
- For inserts, log an insert operation showing the values in the new row.
- For updates, log an update operation showing the new values in the updated row.
- For deletes, log a removal operation showing the values in the deleted row.
For this example we will specify AFTER triggers because we only want the log table to track successful changes to the data table (BEFORE triggers will activate even if row-change operation fails).
CREATE TRIGGER ai_data AFTER INSERT ON data
FOR EACH ROW
BEGIN
INSERT INTO data_log (action,id,timestamp,data1,data2)
VALUES('insert',NEW.id,NOW(),NEW.data1,NEW.data2);
END;
CREATE TRIGGER au_data AFTER INSERT ON data
FOR EACH ROW
BEGIN
INSERT INTO data_log (action,id,timestamp,data1,data2)
VALUES('update,NEW.id,NOW(),NEW.data1,NEW.data2);
END;
CREATE TRIGGER ad_data AFTER INSERT ON data
FOR EACH ROW
BEGIN
INSERT INTO data_log (action,id,timestamp,data1,data2)
VALUES('delete',OLD.id,NOW(),OLD.data1,OLD.data2);
END;
NOTE: If you are performing this via phpMyAdmin the you will need to modify the above trigger creation code. The reason being that the semicolon causes an issue as it is usually defaulted to the Delimiter. Therefore, change 'END;' to 'END$$' for each trigger, and you will need to also change the Delimiter of phpMyAdmin to ‘$$’. The Delimiter field in phpMyAdmin will be located just below the SQL box in the browser.
[출처] http://www.jicdesign.com/blog/3964-2/
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86634 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 79014 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95768 |
| 2 | SQLD 기출 문제 및 요약 정리 모음 | 졸리운_곰 | 2020.03.06 | 2879 |
| 1 |
SQLP 기출문제_1
| 졸리운_곰 | 2017.05.27 | 1874 |

