考虑以下几点:
START TRANSACTION;
BEGIN;
INSERT INTO prp_property1 (module_name,environment_name,NAME,VALUE) VALUES ('','production','','300000');
/** Assume there is syntax error SQL here...**/
Blah blah blah
DELETE FROM prp_property1 WHERE environment_name = 'production';
COMMIT TRANSACTION;问题:
我注意到事务自动回滚,记录插入尝试失败。
如果在上面的ROLLBACK TRANSACTION中没有提供错误处理程序或错误检查,那么在上面这样的示例中,它是否安全,因为COMMIT TRANSACTION从未被执行过?
我假设事务将立即回滚,并在发生错误时立即丢弃。
发布于 2011-05-25 09:05:12
不,事务不会在发生错误时立即回滚。但是您可能正在使用应用此策略的客户端应用程序。
例如,如果您使用mysql命令行客户端,那么它通常在发生错误时停止执行,并将退出。当事务正在进行时退出确实会导致回滚。
在编写自己的应用程序时,可以在回滚时控制策略,但也有一些例外:
除了这些条件之外,如果您调用一个生成错误的命令,则该错误将如常返回,您可以随意执行您喜欢的任何操作,包括无论如何提交事务。
发布于 2015-10-05 18:20:57
使用Mysql存储过程
BEGIN
DECLARE exit handler for sqlexception
BEGIN
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO prp_property1 (module_name,environment_name,NAME,VALUE) VALUES ('','production','','300000');
[ERROR]
COMMIT;
END您可以设置警告或错误回滚,然后不需要删除,事务所有条目都会被删除。
发布于 2012-03-12 02:28:52
您可以使用过程来更有效地完成这一任务。
https://stackoverflow.com/questions/6121917
复制相似问题