如果列值不存在,则SQL INSERT新行

时间:2012-12-06 17:51:32

标签: mysql sql

我的SQL查询遇到了一些麻烦,我不断收到语法错误。

有问题的查询是:

INSERT INTO $db (uuid, quest, stage, completion, quest_id, dstart) VALUES ('".$avatar_key."','".$quest_name."','".$quest_stage."','".$qc."','".$quest_id."','".$date."') WHERE NOT EXISTS (SELECT *
       FROM $db
       WHERE uuid = '$avatar_key' AND quest_id = '$quest_id'
       )

我要做的是检查表是否有一行,同时具有$ avatar_key和$ quest_id的确切值,如果这样的行不存在,那么我希望它插入一个新行

我收到一个错误,我似乎无法弄清楚如何解决;查询本身看起来(虽然我是一个SQL新手)是/应该/工作。我正在使用SQL 5.5,&这是我收到的错误消息:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   '不存在的地方附近(选择*)          来自sldb_quest          在第1行uuid ='0089dcea-'

我知道拥有唯一标识符会有所帮助,但数据库会存储大量行,其中许多行具有相同的值,唯一的唯一值是UUID,我必须匹配使用quest_id来查找我想要的特定行。 uuids看起来像这样:“0089dcea-bf39-40f5-859e-d79bdc383f1b”并为每个用户唯一生成。

任何关于我做错的指示都将非常感激!我确信这只是我在某个地方错过的一个小细节,但我找不到任何运气。

1 个答案:

答案 0 :(得分:1)

WHERE子句在INSERT列表中无效VALUES。您可以使用INSERT ... ON DUPLICATE UPDATE,但我不确定更新是您想要的。

如果将uuid(有或没有quest_id)设置为唯一键,您可以尝试的最简单的方法是使用IGNORE

INSERT IGNORE INTO $db (uuid, quest, stage, completion, quest_id, dstart) 
VALUES ('".$avatar_key."','".$quest_name."','".$quest_stage."','".$qc."','".$quest_id."','".$date."')

如果您还没有唯一的密钥,我强烈建议您制作一个密钥。