我有一张名为 bag 的表格(再次):
+--------+----------+---------+----------+
| bag_id | chara_id | item_id | item_qty |
+--------+----------+---------+----------+
| 1 | 1 | 2 | 22 |
| 2 | 1 | 1 | 55 |
| 3 | 3 | 1 | 2 |
| 6 | 3 | 4 | 2 |
| 7 | 4 | 4 | 2 |
| 8 | 5 | 4 | 2 |
| 9 | 6 | 4 | 2 |
| 10 | 1 | 5 | 1 |
| 14 | 1 | 8 | 1 |
| 15 | 1 | 6 | 1 |
| 18 | 1 | 4 | 1 |
| 19 | 1 | 3 | 1 |
| 29 | 8 | 1 | 1 |
| 30 | 8 | 7 | 1 |
| 33 | 6 | 2 | 1 |
+--------+----------+---------+----------+
我有 SQL语句:
INSERT INTO bag(bag_id, chara_id, item_id, item_qty)VALUES(NULL, :id, :item_id,1)
在询问如何删除重复之后wat我想做下一步(进一步限制重复)是当用户购买已经存在于他的包中的项目时,它会将item_qty增加1。
像:
if chara_id = exist and item_id exist
item_qty = item_qty + 1
else
#..normal insert
如果我使用:
INSERT INTO bag(bag_id, chara_id, item_id)VALUES(NULL, 1, 2)
它不应该插入但是将item_qty更新为23,因为该条目已经存在。
答案 0 :(得分:3)
INSERT ... ON DUPLICATE KEY UPDATE
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
答案 1 :(得分:2)
MySQL支持INSERT ... ON DUPLICATE KEY UPDATE
但在它工作之前,你需要在表上有一个唯一的约束。如果您还没有唯一约束,则根据您的示例,如果值已存在,则检查两列
ALTER TABLE bag ADD CONSTRAINT tb_unique UNIQUE (chara_id, item_id)
一旦实施,ON DUPLICATE KEY UPDATE
将无效。
INSERT INTO bag(chara_id, item_id, item_qty)
VALUES(1, 2, 1)
ON DUPLICATE KEY UPDATE item_qty = item_qty + 1