通过基于值的决策使MySQL查询失败

时间:2014-11-12 12:54:59

标签: mysql validation error-handling

我正在使用如下的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 :(得分:0)

我们结束了实现服务器存储过程,以便在成功或失败的情况下返回1或0。如果使用临时表出现负值,SSP也会负责不更改数据库。

该程序变得非常复杂,但我们找不到更简单的解决方案(特别是没有SSP的情况下没有可靠的独立移民解决方案)。