Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql查询在条目已存在时插入或更新_Mysql - Fatal编程技术网

mysql查询在条目已存在时插入或更新

mysql查询在条目已存在时插入或更新,mysql,Mysql,我有以下查询user_id不是,也不能是主键,因为根据表的另一列,每个用户都有许多条目。我用了重复的钥匙,但不起作用。它仍然会添加一个新行。有什么想法吗 INSERT INTO profile (user_id, correct) VALUES(". $user_id . ", correct + 1) ON DUPLICATE KEY UPDATE correct=correct+1 编辑 因此,如果此用户id存在行,我想更新此条目并设置correct=correct+1,而不是再次使用用户

我有以下查询user_id不是,也不能是主键,因为根据表的另一列,每个用户都有许多条目。我用了重复的钥匙,但不起作用。它仍然会添加一个新行。有什么想法吗

INSERT INTO profile (user_id, correct) VALUES(". $user_id . ", correct + 1)
ON DUPLICATE KEY UPDATE correct=correct+1
编辑 因此,如果此用户id存在行,我想更新此条目并设置correct=correct+1,而不是再次使用用户id和correct=1创建新条目

INSERT IGNORE INTO profile (user_id, correct)
VALUES ($user_id, 0);

UPDATE profile SET correct = correct + 1 
WHERE  user_id = $user_id;  -- updates 0 to 1
或:

如果未找到:

INSERT INTO profile (user_id, correct)
VALUES ($user_id, 1);
我更喜欢第二种变体。
第一个变体要求用户id具有唯一的约束。主键计数

你的问题对我来说没什么意义。如果用户id不是唯一的,那么如何知道要更新哪一行?让它听起来像user_id加上其他一些未命名的列应该一起成为主键;但是您有一个INSERT语句,它没有为另一列设置值。我认为您可能需要重新检查表设计,并确保有一个合理的主键。
INSERT INTO profile (user_id, correct)
VALUES ($user_id, 1);