背景是这样的:    我的应用程序要从本地数据库的某张表中取出所有的数据,只涉及读操作;其他的应用程序随时都可能向数据库中插入数据,并且只涉及插入操作。
    现在我想在读取完所有数据后,把已读过的数据从表中清空。未读过的数据不作处理。    请问,这个SQL命令该怎么写?

解决方案 »

  1.   

    你的标题和你的贴子内容似乎不是同一问题。在MYSQL中检索某个时间后的所有记录用什么命令
    select * from table1 where colTime >= '2010-05-20 20:30:00';现在我想在读取完所有数据后,把已读过的数据从表中清空。未读过的数据不作处理。
    最好是有主键,读 select * from table where coltime> '2010-05-20 20:30:00' order by id; 然后记录最后一条id ,比如是12345,然后再 delete from table1 where id<=12345
      

  2.   

        我的想法是记录下程序提取数据的时间 T ,等数据处理完成,即将关闭MYSQL连接前将时间 T 之前的数据从数据库表中清空。所以就用了这个标题。
        还有,读取数据的时间是未知的,读操作每隔一段时间自动进行。
      

  3.   


    我当初的考虑是,原来的程序不处理ID,所以就没有取这个字段。如果要根据ID来删除数据的话,就需要修改处理数据的代码。为了尽可能少地修改原来的代码,才想出这个方法。所以说,我的想法就是,让程序记下从数据库表中读数据的时间点 T,然后在数据处理完成之后,用一条语句:"DELETE FROM TABLE WHERE 最后访问时间 <= T" 来实现。
      

  4.   


    这样也可以啊。你不是自己已经有方法了吗?
    不过主要问题是当你select 的同时,如果有新的记录在同一秒内INSERT了,你的程序会有问题。这也是为什么建议用ID。
      

  5.   


    我刚才仔细看了一下代码,如果使用ID的话,代码也不会有太大的改动。刚提到的“最后访问时间”是关键点,也是个“捣乱”的因素。有没有将时间因素更加精确的方法呢?或者说,当程序读取所有数据后,MYSQL可以提供某种机制,自动标记出所有的相关记录,这样可以一次性将其删除。还有一点就是,我也可以不删除已读记录,这样,当下次查询新记录的时候,可以根据前一次提取数据的时间,来确定哪些是新数据,哪些是已经处理的数据。