求问mysql的判断修改/删除的语句该怎么写?

rock_turf 发布于 2017/02/13 11:02
阅读 498
收藏 0

需求是这样的,我现在有个表test,里面3个字段,主键id自增量,int类型字段a,int类型字段b。

现在根据传入id进行判断,如果a=0,则删除这条记录,如果a不为0,则将b置为0.

求问这个语句该怎么写?

加载中
0
a
autocoder

Proc(id)
{

   select ...
   if (0 == a)
   {
          delete...
   }
   else
   {
          update...
   }
}

存储过程 类似上面这种.

0
魔力猫
魔力猫

直接发送两条SQL就是。

0
开源中国-不入流码农
开源中国-不入流码农

好像只有查询才可以用if函数吧,你的这种需求可以在service层解决啊,或者持久层框架用mybatis的话,也可以在mapper文件里进行判断

0
Build_Wu
Build_Wu

一般不建议 直接删除数据  你可以  加一个删除状态字段 来区分 数据是否有效

0
魔力猫
魔力猫

现在根据传入id进行判断,如果a=0,则删除这条记录,如果a不为0,则将b置为0.

update 表 set b=0 where a<>0 and id = ?;

delete 表 where a=0 and id= ?;

实际上直接两条发过去就是。你可以看返回值知道是否执行了。比如先发Update,看update返回值,返回0就是条件不符合,然后再发delete。

0
rock_turf
rock_turf

引用来自“魔力猫”的评论

现在根据传入id进行判断,如果a=0,则删除这条记录,如果a不为0,则将b置为0.

update 表 set b=0 where a<>0 and id = ?;

delete 表 where a=0 and id= ?;

实际上直接两条发过去就是。你可以看返回值知道是否执行了。比如先发Update,看update返回值,返回0就是条件不符合,然后再发delete。

我觉得还是弄个存储过程会好一些,这样搞起来太麻烦了

魔力猫
魔力猫
一点不麻烦,超级简单。在我看来你根本不用select去查,直接发Update和delete语句就可以。要看结果可以看返回的修改行数。如果发现不对回滚就是。这种简单事情还搞存储过程,先查出来然后再处理才是画蛇添足。
0
rock_turf
rock_turf

引用来自“Build_Wu”的评论

一般不建议 直接删除数据  你可以  加一个删除状态字段 来区分 数据是否有效

数据量太大了,而且很有可能还会再次添加上,所以这里操作都是直接删。

0
rock_turf
rock_turf

引用来自“autocoder”的评论

Proc(id)
{

   select ...
   if (0 == a)
   {
          delete...
   }
   else
   {
          update...
   }
}

存储过程 类似上面这种.

请问这个具体的过程该怎么写呢?我试着写了几个,不停地出错...

 

0
a
autocoder

引用来自“autocoder”的评论

Proc(id)
{

   select ...
   if (0 == a)
   {
          delete...
   }
   else
   {
          update...
   }
}

存储过程 类似上面这种.

引用来自“rock_turf”的评论

请问这个具体的过程该怎么写呢?我试着写了几个,不停地出错...

 

告诉你思路 自己尝试了. 帮你写好是害你.

18y
18y
你比较适合当老师呢
0
rock_turf
rock_turf

引用来自“魔力猫”的评论

现在根据传入id进行判断,如果a=0,则删除这条记录,如果a不为0,则将b置为0.

update 表 set b=0 where a<>0 and id = ?;

delete 表 where a=0 and id= ?;

实际上直接两条发过去就是。你可以看返回值知道是否执行了。比如先发Update,看update返回值,返回0就是条件不符合,然后再发delete。

引用来自“rock_turf”的评论

我觉得还是弄个存储过程会好一些,这样搞起来太麻烦了

也就是说需要在service层调用两个方法?需要请求两次数据库?会不会有些影响性能呢?因为毕竟是要批量操作的。

返回顶部
顶部