2016-10-21 7 views
2

データがテーブルに更新されないようにするbeforeトリガーがあります。このため私は "SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'この操作は許可されていません。';" 同時に、別のテーブルにデータを挿入したい場合もあります。 しかし、そのデータが挿入されないようにしています。私のコードは以下の通りです。Mysql:SIGNAL SQLSTATEがデータの挿入を妨げています

CREATE TRIGGER TRG_RESTRICT_UPDATE 
BEFORE UPDATE ON AUDIT_DATA 
FOR EACH ROW 
BEGIN 


    INSERT INTO AUDIT_DATA_OTHER 
      (PRACTICE_GROUP_ID 
      ,AUDIT_TYPE 
      ,AUDIT_SUB_TYPE 
      ,AUDIT_SOURCE 
      ,EXTERNAL_SYSTEM_TYPE 
      ,AUDIT_DATA 
      ,FOUND_SET_AUDIT_DATA 
      ,OWNER_TYPE 
      ,OWNER_ID 
      ,CUSTOMER_ID 
      ,PATIENT_NUMBER 
      ,PATIENT_FIRST_NAME 
      ,PATIENT_LAST_NAME 
      ,PATIENT_MIDDLE_NAME 
      ,PATIENT_BIRTH_DATE 
      ,AUDIT_INFO 
      ,IP_ADDRESS 
      ,WORKSTATION_NAME 
      ,CREATE_BY 
      ,CREATE_DATE 
      ,CREATE_PROCESS 
      ,USERNAME 
      ,IS_EMERGENCY_MODE 
      ,EMERGENCY_NOTES 
      ,EMERGENCY_FIRST_NAME 
      ,EMERGENCY_LAST_NAME 
      ,ENCOUNTER_TYPE 
      ,ENCOUNTER_DATE 
      ,ENCRYPTED_AUDIT_DATA) 
    VALUES 
      (1 
      ,'AttemptToModifyAuditRecord' 
      ,'Update' 
      ,'MAXIMEYES_APPLICATION' 
      ,'' 
      ,NULL 
      ,'' 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,'SQL query which attempted to execute:Update' 
      ,NULL 
      ,NULL 
      ,-1 
      ,NOW() 
      ,1 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL 
      ,NULL); 


SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'This operation is not allowed.'; 


END $$ 

答えて

0

トリガーで発生する例外が有効従って、それは同様にログテーブルに挿入をロールバックし、すべてのトランザクションを停止し、ロールバック - ログテーブルを設けてもトランザクションです。 MySQL documentation on triggersとして

は言う:

トリガーは、STARTトランザクションとして明示的または暗黙的にトランザクションを開始または終了ステートメントを使用COMMIT、またはそのため

、唯一の本当のチャンスをロールバックすることはできませんロールバックはその挿入には適用されないため、非/トランザクションログテーブル(myisamテーブルなど)を使用する必要があります。

関連する問題