gpt4 book ai didi

mysql - 是否可以不用程序进行mysql事务?

转载 作者:行者123 更新时间:2023-11-29 20:12:31 28 4
gpt4 key购买 nike

问题是编写一个事务语句来更新数据库列。它可以在可以使用 DECLAREIF 语句的过程中完成。然而,要求不是有程序。这能实现吗?这是我尝试过的:

DELIMITER $$
CREATE PROCEDURE `sp_updatecolumn`()
BEGIN
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
START TRANSACTION;
UPDATE mytable
SET mycolumn=1
WHERE mycolumn=2;
IF `_rollback` THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END$$
DELIMITER ;

最诚挚的问候,

最佳答案

是的,我们可以在没有过程的情况下回滚事务,但是我们无法通过脚本捕获脚本中的错误(以声明处理程序)。

我们可以在执行sql脚本后捕获错误,然后rollbak或commit:

try {
$pdo->exec("START TRANSACTION;");
$stmt = $pdo->prepare('INSERT INTO `test` (`id`) VALUES (:id);');
$stmt->bindValue(':id', $_POST['id']?$_POST['id']:NULL, PDO::PARAM_INT);
$stmt->execute();
$pdo->exec("COMMIT;");
} catch (PDOException $e) {
$pdo->exec("ROLLBACK;");
die("<p>" . $e->getMessage() . "</p>");
}

我们可以尝试这样做(但行不通!!!):

SELECT @error_count := @@error_count;
START TRANSACTION;
INSERT INTO `test` (`id`) VALUES (1);
INSERT INTO `test` (`id`) VALUES (1); -- Error on dupl...
INSERT INTO `test` (`id`) VALUES (3);
-- It is your IF:
SET @sql = (SELECT IF(
@@session.error_count>@error_count,
"ROLLBACK;",
"COMMIT;"
));
PREPARE stmt FROM @sql;
EXECUTE stmt;

关于mysql - 是否可以不用程序进行mysql事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39993129/

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