如果没有插入,如何检查记录是否存在

时间:2012-04-29 01:44:58

标签: mysql if-statement insert exists ignore

我正在制作一个博客网站,我需要在将标签插入tblTag之前检查标签是否存在

这就是我正在尝试的:

 $var_sqlTagsCheck = "IF (EXISTS(SELECT * FROM tblTag t WHERE t.tagName = '$var_tagCollectInsert'))
 BEGIN
    INSERT IGNORE INTO tblTag
 SET tagName = '$var_tagCollectInsert'
 END
 ELSE
 BEGIN
 INSERT INTO tblTag (tagId, tagName) VALUES ('', '$var_tagCollectInsert'))
 END
 ";

但是工作不正常,有人可以借给我一些帮助吗?我哪里出错了,这似乎是相当直接的SQL。

2 个答案:

答案 0 :(得分:1)

尝试在 WHERE 子句中使用 EXISTS 谓词:

 INSERT INTO tblTag (tagId, tagName)
 SELECT '', '$var_tagCollectInsert'
 WHERE NOT EXISTS(SELECT * FROM tblTag t
                  WHERE t.tagName = '$var_tagCollectInsert'));

MySQL的 INSERT INTO 的一般形式是:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

答案 1 :(得分:0)

tagId是主键吗?如果是,您无需插入''或者是一个空值。如果没有尝试将其设置为主键并启用其自动启动,那么您只需要提供tagName我非常确定它确实是直接的。因此,您应该检查所有插入项是否具有值或可用于插入查询。