SQL的SELECT和UPDATE语句求教、、、
我的问题是这样的:我有一张表,比如表明为carInfo,刚开始的数据如下:然后这个时候我需要将所有flag=1的数据取出来,相当于,select*fromcarInfow...
我的问题是这样的:
我有一张表,比如表明为carInfo,刚开始的数据如下:
然后这个时候我需要将所有flag=1的数据取出来,相当于,select * from carInfo where flag=1;
然后将这些select到的数据的所有flag置0;结果如下表:
这个时候新插入的数据字段flag都是1,再次查询时还是select flag=1的所有值;,所以,现在的问题是,这些SQL语句该怎么写,谢谢大家了、、、
(可不可以不用flag而用游标来记录之前查询过的数据。。。,下次查询的时候只查询新的数据)
问题原型
不好意思,可能是我表述的不是很清楚,我的意思是,每次查询取数据的时候把flag=1的数据选出来,然后我放在程序里进行处理,数据库是动态更新的,会不断有新的数据进来,新数据进来的时候flag都是1的,然后我每次查询的时候就只要flag=1的这些列的值,之前已经查询过的就把它flag置0,下次查询取数据的时候就不要取上次取过的数据了,flag相当于一个标记,就是flag=0时表示的是旧的数据,或者是上次已经取过的数据,没有取过的数据都是flag=1的;然后我的需求是,每次取完flag=1那些所有列里面的数据之后,同时将它们的flag置0,相当于做一个标记,说明这些数据已经取过了,下次我就不再取了。。。谢谢大家帮忙啦 展开
我有一张表,比如表明为carInfo,刚开始的数据如下:
然后这个时候我需要将所有flag=1的数据取出来,相当于,select * from carInfo where flag=1;
然后将这些select到的数据的所有flag置0;结果如下表:
这个时候新插入的数据字段flag都是1,再次查询时还是select flag=1的所有值;,所以,现在的问题是,这些SQL语句该怎么写,谢谢大家了、、、
(可不可以不用flag而用游标来记录之前查询过的数据。。。,下次查询的时候只查询新的数据)
问题原型
不好意思,可能是我表述的不是很清楚,我的意思是,每次查询取数据的时候把flag=1的数据选出来,然后我放在程序里进行处理,数据库是动态更新的,会不断有新的数据进来,新数据进来的时候flag都是1的,然后我每次查询的时候就只要flag=1的这些列的值,之前已经查询过的就把它flag置0,下次查询取数据的时候就不要取上次取过的数据了,flag相当于一个标记,就是flag=0时表示的是旧的数据,或者是上次已经取过的数据,没有取过的数据都是flag=1的;然后我的需求是,每次取完flag=1那些所有列里面的数据之后,同时将它们的flag置0,相当于做一个标记,说明这些数据已经取过了,下次我就不再取了。。。谢谢大家帮忙啦 展开
9个回答
展开全部
这个因为是数据不断进入的,貌似用锁也不太好使吧
那么我给你个建议好了,这个标志位不要光0和1了,再加上2好了
0是已经处理过,并且更改记录,1是未处理,未记录,2是未处理,已经记录
读取新数据的时候,先update carinfo set flag=2 where flag=1 ,这样将这一批数据置2
然后select * from carInfo where flag=2 选出这一批数据,然后处理什么的
然后再update carinfo set flag=0 where flag=2
这样这一批正在处理的数据处理完后更新标志位的时候就不会影响后面新进来的数据的标志位了!甚至你可以把标志位已经置为2的这批数据转移到另一个“同源的历史记录表中”,也同样不影响,而且还能够使查询效率不会因为大量的历史记录而不断降低
你的意思不也正是一批一批的处理数据么,这样一批一批的而不是每一次有数据进入都处理可以大幅度提高性能,你甚至可以设一个始终,每过一阵子,大概一次积攒多少数据一次处理
那么我给你个建议好了,这个标志位不要光0和1了,再加上2好了
0是已经处理过,并且更改记录,1是未处理,未记录,2是未处理,已经记录
读取新数据的时候,先update carinfo set flag=2 where flag=1 ,这样将这一批数据置2
然后select * from carInfo where flag=2 选出这一批数据,然后处理什么的
然后再update carinfo set flag=0 where flag=2
这样这一批正在处理的数据处理完后更新标志位的时候就不会影响后面新进来的数据的标志位了!甚至你可以把标志位已经置为2的这批数据转移到另一个“同源的历史记录表中”,也同样不影响,而且还能够使查询效率不会因为大量的历史记录而不断降低
你的意思不也正是一批一批的处理数据么,这样一批一批的而不是每一次有数据进入都处理可以大幅度提高性能,你甚至可以设一个始终,每过一阵子,大概一次积攒多少数据一次处理
展开全部
update carinfo set flag=0 where flag=1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把插入的flag的初始值改为0啦,或者直接将表中所有的flag=1 upate flag=0啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把flag字段的默认值设为1,查询后面跟一句update carlnfo set flag=0 where flag=1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只提取后插入的数据进行更新,是这个意思么? Update carInfo t Set flag=0 where Rowid In(select max(rowid) from carInfo p where t.carid=p.carid and t.flag=1);
更多追问追答
追问
那个Rowid是什么啊?下面的图是新来的数据的flag是1,之前查询过的数据之后设置falg=0,要选择到数据之后再更新这些选择的数据的flag字段值为0,所以这个过程不会写
追答
你用的是ORACLE数据库么?里面的伪列,要是只想要那个字段为0,直接在插入数据的时候,把它写死就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用游标处理这个问题不恰当,游标是为了动态得到每一条记录
这个问题触发器最好,只要新插入数据的时候,用触发器设置flag=0
这个问题触发器最好,只要新插入数据的时候,用触发器设置flag=0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询