我需要对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
WHEREmid
= 180 AND 第2行的“pid”
任何想法本质上我都希望在匹配值
时阻止重复行添加到此表中答案 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列的唯一索引?