如果SQL语句中有任何错误,系统将自动回滚更改,如何启动事务?
用PHP
try {
// First of all, let's begin a transaction
$db->beginTransaction();
// A set of queries; if one fails, an exception should be thrown
$db->query('first query');
$db->query('second query');
$db->query('third query');
// If we arrive here, it means that no exception was thrown
// i.e. no query has failed, and we can commit the transaction
$db->commit();
} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$db->rollback();
}
Run Code Online (Sandbox Code Playgroud)
如何在没有PHP的情况下重复逻辑,只有MYSQL
您可以将多个查询写入MySQL
过程/函数,并且可以像下面给出的示例一样维护事务.基本上,您声明一个将调用rollback的错误处理程序.
PROCEDURE `myprocedure`()
BEGIN
.. Declare statements ..
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
.. set any flags etc eg. SET @flag = 0; ..
ROLLBACK;
END;
START TRANSACTION;
.. Query 1 ..
.. Query 2 ..
.. Query 3 ..
COMMIT;
.. eg. SET @flag = 1; ..
END
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅以下链接
Dik*_*nia -11
这是我最后一篇与 SQL 事务相关的工作,也许下面的代码示例可以帮助你。该代码是为MS SQL 服务器开发的。请注意,您不能在 MySQL 服务器中使用它,因为 MySQL 没有该功能。
主要思想是将主查询(可以多个)放在“try”和“transaction”子句中,然后如果查询执行成功,则查询将被提交到数据库中,否则如果失败,在事务完全回滚之前,“catch”部分将引发错误。
BEGIN TRY
BEGIN TRANSACTION
--Insert Your Queries Here--
COMMIT
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
IF @@TRANCOUNT > 0
ROLLBACK
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH
Run Code Online (Sandbox Code Playgroud)