mysql在重复的FIELD而不是KEY上插入


-------------------------------------|user_id | user_name | user_visits|-------------------------------------|1|foo|5|-------------------------------------|2|bar |12|-------------------------------------

user_id:自动递增,user_visits:默认1

INSERT INTO表(user_name(VALUES('baz'(、('bar'(和('qux'(;

上述语句当然会插入3条新记录,结果是:

-------------------------------------|user_id | user_name | user_visits|-------------------------------------|1|foo|5|-------------------------------------|2|bar |12|-------------------------------------|3|baz|1|-------------------------------------|4|bar|1|-------------------------------------|5|qux|1|-------------------------------------

但我正在努力实现的是:

-------------------------------------|user_id | user_name | user_visits|-------------------------------------|1|foo|5|-------------------------------------|2|bar |13|-------------------------------------|3|baz|1|-------------------------------------|4|qux|1|-------------------------------------

因此,从字面上讲,

如果字段username存在,请更新uservists,否则插入新记录。

用一个insert语句就可以实现这一点吗?

当然有,但它与insert语句无关。您需要在user_name列上添加一个唯一索引:

create unique index user_name_idx on yourtable (user_name);

然后,在跟踪计数的代码中,必须决定是插入还是更新。

您必须为用户名字段创建一个键,然后使用INSERT ON DUPLICATE查询来更新列值。

例如,您的查询必须是

   INSERT INTO table (user_name) VALUES ('baz'), ('bar'), ('qux') 
   ON DUPLICATE KEY UPDATE user_visits=user_visits+1;

如需进一步参考,请访问http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

您可以保持INSERT语句的原样,并实现一个处理特殊操作的触发器。

请参阅:触发简介

相关内容

  • 没有找到相关文章

最新更新