반응형
감사 테이블에 대한 트리거 생성
여기 새로 왔어요. 저는 phpmyadmin에 있는 제 db 테이블에 대한 감사 트리거가 필요했고 친구가 따라야 할 가이드를 추천했지만, 저는 막혀서 도움이 필요합니다. 아래 코드는 코드입니다.
샘플 테이블(계정 테이블):
CREATE TABLE `accounts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`account_no` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`initial_balance` double DEFAULT NULL,
`total_balance` double NOT NULL,
`note` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`is_default` tinyint(1) DEFAULT NULL,
`is_active` tinyint(1) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
다음은 계정에 대한 감사 표입니다.
CREATE TABLE `accounts_audit_log` (
accounts_id bigint(20) NOT NULL,
old_row_data JSON,
new_row_data JSON,
dml_type ENUM('INSERT', 'UPDATE', 'DELETE') NOT NULL,
dml_timestamp TIMESTAMP NOT NULL,
dml_created_by VARCHAR(255) NOT NULL,
PRIMARY KEY (`accounts_id`,`dml_type`,`dml_timestamp`)
)
계정 테이블 아래에 phpmyadmin의 트리거 탭을 사용하여 다음 트리거를 추가했습니다.
삽입;
INSERT INTO accounts_audit_log (
accounts_id,
old_row_data,
new_row_data,
dml_type,
dml_timestamp,
dml_created_by
)
VALUES(
NEW.id,
null,
JSON_OBJECT(
"account_no", NEW.account_no,
"name", NEW.name,
"initial_balance", NEW.initial_balance,
"total_balance", NEW.total_balance,
"note", NEW.note,
"is_default", NEW.is_default,
"is_active", NEW.is_active,
"created_at", NEW.created_at,
"updated_at", NEW.updated_at
),
'INSERT',
CURRENT_TIMESTAMP,
@logged_user,
@transaction_timestamp
)
업데이트;
INSERT INTO accounts_audit_log (
accounts_id,
old_row_data,
new_row_data,
dml_type,
dml_timestamp,
dml_created_by
)
VALUES(
NEW.id,
JSON_OBJECT(
"account_no", OLD.account_no,
"name", NEW.name,
"initial_balance", OLD.initial_balance,
"total_balance", OLD.total_balance,
"note", OLD.note,
"is_default", OLD.is_default,
"is_active", OLD.is_active,
"created_at", OLD.created_at,
"updated_at", OLD.updated_at
),
JSON_OBJECT(
"account_no", NEW.account_no,
"name", NEW.name,
"initial_balance", NEW.initial_balance,
"total_balance", NEW.total_balance,
"note", NEW.note,
"is_default", NEW.is_default,
"is_active", NEW.is_active,
"created_at", NEW.created_at,
"updated_at", NEW.updated_at
),
'UPDATE',
CURRENT_TIMESTAMP,
@logged_user,
@transaction_timestamp
)
삭제;
INSERT INTO accounts_audit_log (
accounts_id,
old_row_data,
new_row_data,
dml_type,
dml_timestamp,
dml_created_by
)
VALUES(
OLD.id,
JSON_OBJECT(
"account_no", OLD.account_no,
"name", OLD.name,
"initial_balance", OLD.initial_balance,
"total_balance", OLD.total_balance,
"note", OLD.note,
"is_default", OLD.is_default,
"is_active", OLD.is_active,
"created_at", OLD.created_at,
"updated_at", OLD.updated_at
),
null,
'DELETE',
CURRENT_TIMESTAMP,
@logged_user,
@transaction_timestamp
)
이제 트리거가 작동하는지 확인하기 위해 계정 테이블을 편집하려고 하면 #1136 - 열 수가 행 1의 값 수와 일치하지 않습니다. 무엇이 잘못되었는지 정말로 확인할 수 없습니다. 누구나 동일한 기능을 달성할 수 있는 더 쉬운 코드를 제안할 수 있다면 도움이 될 것입니다.감사해요.
언급URL : https://stackoverflow.com/questions/73087102/create-trigger-for-audit-table
반응형
'sourcetip' 카테고리의 다른 글
Python Pandas - Excel 시트의 특정 열에 쓰는 방법 (0) | 2023.08.26 |
---|---|
CSS에서 확인란의 테두리 스타일을 변경하는 방법은 무엇입니까? (0) | 2023.08.26 |
사용자 지정 주석 @Foo가 있는 모든 콩을 어떻게 찾을 수 있습니까? (0) | 2023.08.26 |
Run As: Spring Boot App과 Run As: Java Application의 차이점이 있습니까? (0) | 2023.08.26 |
Angular/Karma 장치 테스트 오류 "1개의 타이머가 대기열에 있습니다." (0) | 2023.08.26 |