gpt4 book ai didi

mysql - 从存储过程调用的触发器(触发器的回滚会发生吗?)

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:52 27 4
gpt4 key购买 nike

考虑一个场景。我有表 T1,它在 INSERT 操作时创建了触发器。和存储过程如下。

//StoredProcedure.sql

BEGIN TRANSACTION;
...
...
INSERT INTO TABLE T1
/* Trigger will be executed on record insertion in Table T1 */
.....
.....
.....
.....
Consider some error here...
.....
.....
COMMIT TRANSACTION;
.....
.....
ROLLBACK TRANSACTION;

On Error in Stored Procedure会调用ROLLBACK TRANSACTION,会不会在Trigger中执行ROLLBACK操作?

MSSQL 和 MySQL:考虑到理想情况,它将由 Trigger 执行 ROLLBACK 操作,但我想听听您对这个问题的看法。

最佳答案

是的,它肯定会回滚Trigger执行的操作。

我刚测试过。 :)

create table test (id int, testval varchar(20))
create table dummytest (dummyid int, dummytestval varchar(20))

CREATE TRIGGER trg_ins_test
ON test
FOR INSERT
AS
BEGIN
INSERT INTO dummytest
(dummyid,
dummytestval)
SELECT i.id,
i.testval
FROM inserted i
LEFT JOIN test t
ON i.id = t.id
AND i.testval = t.testval
END

CREATE PROCEDURE usp_test
AS
BEGIN
BEGIN try
BEGIN TRANSACTION

INSERT INTO test
VALUES (1,
'a')

SELECT 1 / 0

COMMIT
END try

BEGIN catch
IF @@TRANCOUNT > 0
ROLLBACK
END catch
END

您可以使用上面的代码在您的终端进行测试。

关于mysql - 从存储过程调用的触发器(触发器的回滚会发生吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251689/

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