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

标签 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 作为结果。此外,如果使用临时表出现负值,SSP 也会注意不更改数据库。

该过程变得相当复杂,但我们找不到更简单的解决方案(尤其是没有 SSP 的可靠配置独立解决方案)。

关于mysql - 通过基于值的决策使 MySQL 查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887533/

相关文章:

MySQL历史表;丢失修订顺序

mysql - 机器人筛选网站的每个页面

mysql - 使用序列循环更新列集?

php - 如何禁用 symfony 2.3 中特定按钮的 html5 验证

javascript - php 和 javascript 表单验证问题

error-handling - 为什么WSO2 ESB错误代码不针对不同的情况

mysql - 如何将数据库中的数据从字符串更改为 id - Rails,Mysql

java - 验证失败时在 Spring RestController 中抛出什么类型的异常?

error-handling - 如何不向一般DNN用户显示错误消息详细信息

c++ - 如何使用 libviso2?