【问题标题】:MYSQL UPDATE query that does delete the row instead, if updated value meets condition如果更新的值满足条件,则 MYSQL UPDATE 查询会删除该行
【发布时间】:2023-04-02 23:20:01
【问题描述】:

我想对将更新记录的数据库进行一次查询请求,但如果此更改后的一条特定记录等于 0,我想删除这一行。可能吗?示例:

UPDATE `table` SET `row1`=`row1`+5, `row2`=`row2`+30 IF (row1 after the update == 0) DELETE WHERE `primarycolumn`=1

显然,IF (row1 after the change == 0) DELETE 部分只是不起作用的伪代码 - 是否有可能创建一个使其以这种方式工作的查询?

【问题讨论】:

  • 没有。 MySQL 中没有结合 UPDATE 和 DELETE 操作的查询类型。但是您可以通过使用存储过程而不是单个查询来解决您的任务。
  • 但是有一个 IF 语句,我确实遇到了麻烦。我确信会有一种使用它的方法。也许我不应该写“一个查询”——我的意思是,只用一个来自 php.ini 的 mysqli 连接就可以做到这一点。对不起我的英语不好。
  • IF 语句只能在某些复合语句中使用。存储过程就是其中之一。
  • 我在想IF EXISTS(SELECT 1 FROM table WHERE primarycolumn=1 AND row1=-5) THEN {DELETE ...} ELSE {UPDATE ...} 之类的东西 - 因为我知道,当我将 +5 添加到 row1 时,如果它的当前值为 -5,我将得到 0。但是上面的这段代码不起作用,我不知道正确的说法是什么......
  • 你当然可以考虑这个——但是 MySQL 中没有匿名块...

标签: mysql sql-update sql-delete


【解决方案1】:

你不需要更新然后检查row1 = 0
按此条件删除:

DELETE FROM `table` 
WHERE `primarycolumn` = 1 AND `row1` + 5 = 0 

如果条件失败,则不会删除任何内容。
然后做UPDATE:

UPDATE `table` 
SET `row1`= `row1`+ 5, `row2` = `row2` + 30 
WHERE `primarycolumn` = 1

如果该行未被删除,它将被更新,但如果它被删除,则不会更新任何内容。

【讨论】:

  • 我有点问其他解决方案,但这不仅聪明,而且对我有用。正是我正在寻找的东西,即使我不知道它是这样的!
猜你喜欢
  • 2015-10-13
  • 2021-06-06
  • 2019-06-05
  • 2020-09-11
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
相关资源
最近更新 更多