-------------------------------------|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语句的原样,并实现一个处理特殊操作的触发器。
请参阅:触发简介