【问题标题】:Mysql: SIGNAL SQLSTATE is preventing the data to be insertedMysql:SIGNAL SQLSTATE 正在阻止数据被插入
【发布时间】:2017-03-03 22:57:42
【问题描述】:

我有一个前触发器,它可以防止数据更新到表中。为此,我使用了“SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'This operation is not allowed.';”。 同时还想将数据插入到另一个表中。 但它阻止了插入数据。我的代码如下。

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 $$

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    触发器中引发的异常有效地停止并回滚任何事务,因此它也会回滚对日志表的插入 - 前提是日志表也是事务性的。

    正如MySQL documentation on triggers 所说:

    触发器不能使用显式或隐式开始或结束事务的语句,例如 START TRANSACTION、COMMIT 或 ROLLBACK

    因此,您唯一真正的机会是使用非事务/事务日志表,例如 myisam 表,因为回滚不适用于该插入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 2015-07-07
      • 2015-05-21
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多