表字段:id(主键),  ip,  user,  password, create_time, update_time
索引名1, acc ,  字段:name,user  类型Unique,方法BTREE
索引名2,name, 字段 name, 类型 Normal,方法BTREEINSERT INTO account (
account.`ip`,
account.`user`,
account.`password`,
        account.create_time,
account.update_time
)
VALUES
(
192.168.1.103',
'test1',
'm3443',
NOW(),
                NOW()
)
ON DUPLICATE KEY UPDATE
account.`ip`=VALUES(account.`ip`),
account.`user`=VALUES(account.`user`),
account.`password`=VALUES(account.`password`),
account.update_time=NOW()我想要根据ip和user这两个Unique字段, 有相同的IP和user时,就进行更新,没有就插入新的数据.
ON DUPLICATE KEY UPDATE,我的理解是,ON DUPLICATE KEY UPDATE前面的命令遇到UNIQUE字段而出错时,执行后面的命令,也就是把ip,user,password,update_time更新到数据库中,
但结果是,create_time这个字段也更新成最近的时间了,不知道怎么回事,向各位高手请教下

解决方案 »

  1.   

    表结构的问题吧?
    show create table account  看看脚本,应该是设置了 on update 的默认值
      

  2.   


    按照你的方法操作了一遍
    `time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    是不是可以翻译成,  timestamp类型, 默认NULL,  值为空的时候自动更新为当前时间??
    我以为在navcat里面 设计表选项里可以看到表结构了 ,没想到还要输入命令才能看这样的表结构
    那,是不是修改成`time` timestamp DEFAULT NULL就好了? 
    navcat是不是不能做这样的表结构修改?只能新建一个表了?
      

  3.   

    default null 是指 insert 的时候如果不为字段指定值,则设置为NULL
     ON UPDATE CURRENT_TIMESTAMP 是批更新的时候,如果没有为字段指定值,则更新为 CURRENT_TIMESTAMP 
    可以直接改表结构, 界面操作没试过,一般都直接用 sql  sql 的
      

  4.   

    create_time不要加update属性