我正在使用如下所示的 MySQL 查询,该查询收集并计算某些源表中的数量,然后将这些行插入/更新到同一 MySQL 5.6 数据库的另一个表中:
INSERT INTO my_table (quantity, id)
(
SELECT my_quantity, my_id FROM
(
SELECT my_id, (one_quantity-COALESCE(more_quantity,0)) my_quantity, ... FROM
/* Some very complicated sub-query*/
) t
)
ON DUPLICATE KEY UPDATE quantity=my_quantity
我现在的问题是 my_quantity 可以包含负值,因为它是子查询中两列相减的结果。负值通常不应发生,因为基值应始终 >= 减去的值。但是,如果有人以完全错误的方式填充表,这种情况仍然可能发生,在这种情况下,我根本不希望执行 INSERT 或 UPDATE。
那么,如果 my_quantity 中不太可能出现一个或多个负值,是否有一种方法可以导致某种(自定义)错误,从而使整个查询停止?或者在这种情况下我是否需要使用服务器存储过程?
最佳答案
我们结束了服务器存储过程的实现,该过程在成功或失败时返回 1 或 0 作为结果。此外,如果使用临时表出现负值,SSP 也会注意不更改数据库。
该过程变得相当复杂,但我们找不到更简单的解决方案(尤其是没有 SSP 的可靠配置独立解决方案)。
关于mysql - 通过基于值的决策使 MySQL 查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887533/