使用“一条”SQL语句完成批量插入和批量删除操作
Posted @一支烟的功夫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用“一条”SQL语句完成批量插入和批量删除操作相关的知识,希望对你有一定的参考价值。
使用一条SQL语句做批量插入和删除操作
最近在做内容管理系统的时候发现一个问题:多复选框复选框操作,当全选的时候是批量往数据库中的某表插入数据,反选的时候需要批量删除表中的多行数据,删除某一条,增加某一条…由此需要频繁的对表进行修改,要考虑的情况还比较多,经个人多方实践,研究出如下“偏方”:
1. 首先是构造SQL语句:
Insert into T_Operator(F_OperatorID,F_GoodID)
(
Selected
)
delete from T_Operator where F_OperatorID = F_OperatorID and F_MatchID in (UnSelected)
2.参数说明:
Selected表示拼接的字符串:
select 6,0 union select 6,11 union select 6,12
F_OperatorID表示操作员的ID号:这里是6
UnSelected表示未选择的商品ID,格式: 0,1,2
完整的SQL语句:
Insert into T_Operator(F_OperatorID,F_GoodID)
(
select 6,0 union
select 6,11 union
select 6,12
)
delete from T_Operator where F_OperatorID = 6 and F_GoodID in (0,1,2)
意思就是在T_Operator中为F_OperatorID = 6 这个操作员增加3个物品ID分别为0,11,12的管理,插入完成后为这个操作员删除物品ID分别为0,1,2的管理,这条SQL语句在同时又增加和删除的时候是没有问题的。
那么问题来了,实际可能出现的情况是,只减少这个操作员对某个商品的管理,那么只需要执行删除操作,还有可能出现只增加操作员对某个商品的管理,那么只需要执行插入操作。
所以解释一下SQL语句中的“0”:例如当只删除F_GoodID = 8的商品的时候,为了使变量Selected不为空(为空报错),先插入一条6,0 数据(Selected 为 select 6,0),然后再delete语句中UnSelected条件设置为0,8,这样就删除了F_GoodID为0和8的数据。达到了我们删除F_GoodID = 8的目的。SQL语句如下:
Insert into T_Operator(F_OperatorID,F_GoodID)
(
select 6,0
)
delete from T_Operator where F_OperatorID = 6 and F_GoodID in (0,8)
3.“偏方”解释
为何先插入0,再删除0?理由是Selected作为变量在SQL语句中不能为空,所以即使在只有删除操作的时候,我们为了保证SQL语句不报错,就插入F_GoodID = 0 这条数据,然后再删掉它,实际中可以是0也可以是其他内容只要没有任何意义就行。
同理在只增加F_GoodID = 8的时候,我们也为delete语句中的UnSelected预置0,SQL语句如下:
Insert into T_Operator(F_OperatorID,F_GoodID)
(
select 6,0 union
select 6,8
)
delete from T_Operator where F_OperatorID = 6 and F_GoodID in (0)
执行完以上SQL,实际上只完成了插入F_GoodID=8的操作。
以上就是所谓的使用“一条”SQL语句完成批量插入和批量删除操作,欢迎大家留言批评指正!
以上是关于使用“一条”SQL语句完成批量插入和批量删除操作的主要内容,如果未能解决你的问题,请参考以下文章