我有3个疑问:MySQL如何检查查询是否成功执行?
1. INSERT, 2. UPDATE and 3. DELETE
我想知道的是有反正这样,如果成功,或不执行查询,我可以直接检查(即不运行另一个查询检查)?如果它不(即返回了一些错误/异常),那么我想将该错误/异常保存到一些变量中?
例如,下面是我的疑问:
INSERT
查询:
INSERT INTO `users` (id, name, age) VALUES (NEW.id, NEW.name, NEW.age);
UPDATE
查询:
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;
谢谢。
下面是一个使用处理程序简单的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; //
可以产生success_flag或状态或每个手术后你算另一方面,你可以在日志表中存储错误/消息..这将传达你的操作记录:) –
嗨乔丹,虽然,我不想运行另一个操作/查询来计算/ etc。另外,或者如果我这样做,那么我怎样才能得到失败时发生的错误代码和消息? – narainsagar
顺便说一句,我想插入错误'(code,message)'到我的'errors'表中。 – narainsagar