gpt4 book ai didi

MySQL如何检查查询是否成功执行?

转载 作者:行者123 更新时间:2023-11-29 02:17:09 24 4
gpt4 key购买 nike

我有 3 个问题:

1. INSERT, 2. UPDATE and 3. DELETE

我想知道有没有这样我可以直接检查(即,不运行另一个查询来检查)查询是否成功执行?如果没有(即返回了一些错误/异常),那么我想将该错误/异常保存到一些变量中吗?

例如,以下是我的查询:

INSERT 查询:

INSERT INTO `users` (id, name, age) VALUES (NEW.id, NEW.name, NEW.age);

更新查询:

UPDATE `test_db2`.`users`
SET name = NEW.name,
age = NEW.age
WHERE id = NEW.id;

DELETE 查询:

DELETE FROM `test_db2`.`users`
WHERE id = OLD.id;

谢谢。

这是使用 Handler 的简单 INSERT 触发器(我试过):

DELIMITER //

-- TRIGGER FOR INSERT
DROP TRIGGER IF EXISTS `test_db1_users_ai`;
CREATE TRIGGER `test_db1_users_ai` AFTER INSERT ON `users` FOR EACH ROW
BEGIN
-- Perform the insert
INSERT INTO `test_db2`.`users` (id, name, age) VALUES (NEW.id, NEW.name, NEW.age);
-- Handler if this ^ above INSERT fails.
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
--SET @full_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text);
INSERT INTO `test_db1`.`errors` (error_code, error_message) VALUES (@errno, @text);
--SELECT @full_error;
END;
END; //

最佳答案

在MySQL中你可以声明error / warning handlers可以捕获各种错误和警告。如果将处理程序与 get diagnostics command 结合使用, 然后您甚至可以在通用处理程序中捕获确切的错误/警告。

我在 Improve your Stored Procedure Error Handling with GET DIAGNOSTICS 上找到了以下博客文章总结了如何在 MySQL 中捕获存储程序中的错误消息:

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
SET @full_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text);
SELECT @full_error;
END;

显然,如果需要,您可以将错误记录在表中的@full_error 中。如果没有错误处理程序启动,则 sql 语句成功运行。

对于插入和更新,您还可以使用 row_count()函数来确定受影响的记录数。如果此数字为 0,则可能表示有错误。

关于MySQL如何检查查询是否成功执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726590/

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