当前位置: 代码迷 >> 其他数据库 >> SQLite怎么实现以下功能? REPLACE INTO 语句无法解决
  详细解决方案

SQLite怎么实现以下功能? REPLACE INTO 语句无法解决

热度:59   发布时间:2016-05-05 08:17:29.0
SQLite如何实现以下功能? REPLACE INTO 语句无法解决
本帖最后由 tylrr 于 2014-03-30 11:29:46 编辑
我用c#+sqlite 做了一个多线程更新的程序。 

数据库字段如下:   

id(主键,自增字段) , itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额

注: itemid (货物id) ,checkedtime( 检查时间 ) 这两个字段建立了索引(唯一键);( 就是说无论何时表里面的 itemid (货物id) ,checkedtime( 检查时间 ) 这两个字段同时相同的只有一条数据。)


我想实现的功能:

程序使用2个线程处理同一批itemid,itemid对应不同区的销售额。
a线程先判断表里面是否存在itemid,如果不存在itemid的话则插入itemid、checkedtime、a区销售额 ,如果存在itemid则更新a区销售额。

b线程先判断表里面是否存在itemid,如果不存在itemid的话则插入itemid、checkedtime、b区销售额 ,如果存在itemid则更b区销售额。

目前我使用的语句:
a线程的语句
REPLACE INTO itemdetails(itemid,checkedtime,a区销售额 ) VALUES('256','2014-3-22','2300');

b线程的语句
REPLACE INTO itemdetails(itemid,checkedtime,b区销售额 ) VALUES('256','2014-3-22','5700');

遇到的问题:
当a线程先执行,插入了itemid为256和a区销售额的一行数据 ,如:

 itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额
      256                        2014-3-22                         2300
 
此时b线程再执行时,会直接把itemid为256的数据删除掉,然后再插入itemid为256和b区销售额的一行数据 ,变成了:

 itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额
      256                        2014-3-22                                              5700


但是我需要的是,  b线程在保留a区销售额的情况下,更新b区销售额,如:

 itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额
      256                        2014-3-22                           2300               5700

请问应该如何实现?程序原先使用了mysql数据库,在mysql数据库里面我使用了存储过程来实现这个功能,但是现在程序使用了sqlite,没有存储过程,不知道如何实现了。谢谢大伙指点!



------解决方案--------------------
首先..你必须得设置唯一的一个 ID 啊..
  相关解决方案