sourcetip

감사 테이블에 대한 트리거 생성

fileupload 2023. 8. 26. 12:10
반응형

감사 테이블에 대한 트리거 생성

여기 새로 왔어요. 저는 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

반응형