gpt4 book ai didi

Mysql:SIGNAL SQLSTATE 阻止数据插入

转载 作者:行者123 更新时间:2023-11-29 03:23:25 33 4
gpt4 key购买 nike

我有一个前触发器,它可以防止数据更新到表中。为此,我使用了“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 documentation on triggers说:

The trigger cannot use statements that explicitly or implicitly begin or end a transaction, such as START TRANSACTION, COMMIT, or ROLLBACK

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

关于Mysql:SIGNAL SQLSTATE 阻止数据插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40179893/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com