UPDATE logs SET visit_end = DATE_ADD(visit_star,INTERVAL time_taken SECOND)表中的三个字段:
visit_star和visit_end是timestamp类型,time_taken是int类型。本意是想更新visit_end字段,使之的结果为visit_star加time_taken秒。且不论visit_end的结果对不对,一执行这个语句,发现visit_star的时间被修改了。
请问,这种情况是什么原因。
mysql的官方文档,对这个函数的例子也没有使用字段名的,也没查出个所以然来。请高手指教。

解决方案 »

  1.   

    mysql> create table test2(a datetime,b int,c datetime)
        -> ;
    Query OK, 0 rows affected (0.00 sec)mysql> insert into test2 values(now(),10,now());
    Query OK, 1 row affected (0.00 sec)mysql> select * from test2;
    +---------------------+------+---------------------+
    | a                   | b    | c                   |
    +---------------------+------+---------------------+
    | 2013-04-11 18:17:48 |   10 | 2013-04-11 18:17:48 |
    +---------------------+------+---------------------+
    1 row in set (0.00 sec)mysql> update test2 set a=date_add(c,interval b second);
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from test2;
    +---------------------+------+---------------------+
    | a                   | b    | c                   |
    +---------------------+------+---------------------+
    | 2013-04-11 18:17:58 |   10 | 2013-04-11 18:17:48 |
    +---------------------+------+---------------------+
    1 row in set (0.00 sec)mysql> 
      

  2.   

    且不论visit_end的结果对不对,一执行这个语句,发现visit_star的时间被修改了。可能性不大啊。SET visit_end = DATE_A ..应该只会改 visit_end
      

  3.   

    desc logs;看有没有default CURRENT_TIMESTAMP EXTRA ON UPDATE CURRENT_TIMESTAMP
      

  4.   


    desc命令后,
    在Extra栏,看到了on update CURRENT_TIMESTAMP。
    是不是这个设置,造成了我现在遇到的状况呢。客户端工具上发现“根据当前时间戳更新”被勾选了。大概就是这里错误了吧?