在提交之前更新IF条件

时间:2014-10-31 06:52:11

标签: sql postgresql

SQL中是否有UPDATE IF类似语句,允许我针对需要更新的行验证客户端提供的属性的子集?

e.g。 UPDATE posts SET body = $body WHERE post_id = $post_id IF author_id = $author_id

FIND,检查,并且UPDATE包含在交易中并不像我想的那样优雅。也没有通过WHERE子句验证客户端提供的字段。

WHERE子句添加属性将增加需要创建的索引数,而不会在验证之外获得任何好处。

3 个答案:

答案 0 :(得分:2)

你在找这个吗?

  UPDATE posts 
   SET body = $body 
   WHERE post_id   = $post_id AND 
         author_id = $author_id;

答案 1 :(得分:1)

为什么不直接在WHERE子句中使用IF条件?

UPDATE posts
SET body = $body
WHERE post_id = $post_id
AND author_id = $author_id;

答案 2 :(得分:0)

Postgres 中的IF中没有UPDATE条款。

以下是包含UPDATE语法的 Postgres 文档。

虽然我知道你提到你没有发现它很优雅,但你需要在WHERE子句中包含要验证的项目。

另一个选项,虽然你仍然需要将它包含在WHERE子句中,但是将验证逻辑封装在 pl / pgSQL 函数中。如果您拥有在一堆查询中所需的完全相同的验证逻辑,那么这可能是一种更简洁的方法来集中逻辑并减少查询中的重复。