MySQL不存在根据3个值插入记录

时间:2012-07-26 09:49:49

标签: mysql insert

我需要对MySQL进行插入,其中目标表中不存在记录

我的查询

INSERT INTO comment (`mid`, `pid`, `comment_text`, `comment_date`, `comment_type`) 
 VALUES (180, 2, NULL, '2012-07-26 10:19:00', 'tag')  WHERE NOT EXISTS ( SELECT * FROM `comment` WHERE `mid`=180 AND `pid`=2 AND `comment_type`='tag')

然而,当这次运行时,我收到此错误

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'WHERE NOT EXISTS(SELECT * FROM comment WHERE mid = 180 AND   第2行的“pid”

任何想法本质上我都希望在匹配值

时阻止重复行添加到此表中

3 个答案:

答案 0 :(得分:1)

尝试:

INSERT IGNORE INTO comment
(
 `mid`, `pid`, `comment_text`, `comment_date`, `comment_type`
)
(
    SELECT 180, 2, NULL, '2012-07-26 10:19:00', 'tag'
    FROM comment
    WHERE `mid`=180 AND
          `pid`=2 AND
          `comment_type`='tag'
    LIMIT 1
);

编辑:更好的方法:

从表see here

中删除重复项
ALTER IGNORE TABLE comment ADD UNIQUE KEY ix1(mid, pid, comment_type);

INSERT IGNORE INTO comment
(
 `mid`, `pid`, `comment_text`, `comment_date`, `comment_type`
)
VALUES 
(
 SELECT 180, 2, NULL, '2012-07-26 10:19:00', 'tag'
);

答案 1 :(得分:0)

添加ignore

INSERT IGNORE INTO comment ...

防止重复插入。您无法在where中使用insert子句。

  

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。

取自the MySQL INSERT Documentation

这意味着你应该为表添加一个唯一的键(如果你还没有),让DB自己检查重复项。如果数据库发现重复,则不会生成INSERT

如果您想在可能重复的情况下制作UPDATE。见here

答案 2 :(得分:0)

为什么不只是制作包含mid,pid和comment_type列的唯一索引?