【发布时间】:2021-11-15 23:02:54
【问题描述】:
有没有办法以这种方式更新SQL,例如。
主表有一个名为 INVOICESCOUNT 的列。
成功删除发票后,INVOICESCOUNT 会减少。
例如,这样的 SQL 伪代码语句:
Delete From Invoices where INVOICE=500;
Update Customers SET INVOICECOUNT=INVOICECOUNT-1 WHERE Customer=1 (if prior statement returns 1 affected row);
我需要将它嵌入到同一个 SQL 语句中,而不是让源代码处理分别执行 2 个语句。
感谢您的任何建议。如果有这样的解决方案,也请告诉我是否有最低 MySQL 版本要求。
更新更多信息:请注意,我向用户展示的客户列表每次都可能非常不同,例如 CustomerGroupID=?或 CustomerCreated 在特定日期内,因此无法有效缓存客户查询,因此我更喜欢更新 INVOICECOUNT(因为列出不同客户组的不同用户会在一小时内多次点击它)。
【问题讨论】:
-
您不需要表格来记录您的计数。 SQL可以帮你算
-
您不应该将 派生数据 存储在 RDBMS 的表中,包括“另一个表中满足某些条件的行数”之类的聚合 - 而是使用
VIEW.有许多 原因不存储这样的派生数据,即因为它过时 并且变得不正确。数据库的设计应使它们永远不会包含可能过时的内部派生数据。