Mysql 如何检查记录是否存在,如果不存在,请插入

Mysql 如何检查记录是否存在,如果不存在,请插入,mysql,if-statement,insert,exists,ignore,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 INSER

我正在创建一个博客站点,在将标签插入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。

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

MySQL插入的一般形式是:

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

MySQL插入的一般形式是:



tagId是主键吗?如果是,则不需要向其插入或输入空值。如果没有,请尝试将其设置为主键并启用其自动激活,这样您只需要为标记名提供标记名,我很确定它确实是直接的。因此,您应该检查所有插入项是否都有值或可用于插入查询。

标记ID是主键吗?如果是,则不需要向其插入或输入空值。如果没有,请尝试将其设置为主键并启用其自动激活,这样您只需要为标记名提供标记名,我很确定它确实是直接的。因此,您只需检查所有插入项是否都有值或可用于插入查询。

到底发生了什么/消息?定义“无法正常工作”。通常,解决方案是使用唯一索引,尝试插入,并捕获重复键错误。不要先看然后再插入。它不会检查标签是否存在,它不起作用。我的sql语句错了。它会给我一条我设置的错误消息。到底发生了什么/消息?定义“无法正常工作”。通常,解决方案是使用唯一索引,尝试插入,并捕获重复键错误。不要先看然后再插入。它不会检查标签是否存在,它不起作用。我的sql语句错了。它给我一个错误消息,我已经设置。嗯,仍然与相同的错误。我试过你所说的代码$var_sqlTagsCheck=INSERT-INTO-tblTagtagName选择'hey'在不存在的地方选择*FROM-tblTag,其中tagName='hey';代码性能提示:不要从插入的TableName中选择*try select 1 from TableName仍然会出现相同的错误。我试过你所说的代码$var_sqlTagsCheck=INSERT-INTO-tblTagtagName选择'hey'在不存在的地方选择*FROM-tblTag,其中tagName='hey';代码性能提示:不要选择*from TableName插入的try select 1 from TableName很抱歉,我发现您的答案令人困惑,我在这方面没有太多经验。您是说我需要检查SELECT语句是否返回false或truenah。您应该将tagId设置为主键。这就是主键的真正本质,对吗?在您提交的代码中,您试图向tagId插入一个值,我们不应该这样做,因为它应该设置为主键。然后将其设置为主键后。尝试更改此行:插入tblTag标记ID,标记名值,$var_tagCollectInsert'插入此行:插入tblTag标记名值,$var_tagCollectInsert'我的tblTag主键是tagId,如果查看我的代码,我实际上将tagId的值留空,允许它自动递增。代码中的调整不会对我的问题产生任何影响,但是谢谢你的建议。很抱歉,我发现你的答案令人困惑,我在这方面没有太多经验。您是说我需要检查SELECT语句是否返回false或truenah。您应该将tagId设置为主键。这就是主键的真正本质,对吗?在您提交的代码中,您试图向tagId插入一个值,我们不应该这样做,因为它应该设置为主键。然后将其设置为主键后。尝试更改此行:插入tblTag标记ID,标记名值,$var_tagCollectInsert'插入此行:插入tblTag标记名值,$var_tagCollectInsert'我的tblTag主键是tagId,如果查看我的代码,我实际上将tagId的值留空,允许它自动递增。代码的调整不会对我的问题产生任何影响,但是谢谢你的建议
 INSERT INTO tblTag (tagId, tagName)
 SELECT '', '$var_tagCollectInsert'
 WHERE NOT EXISTS(SELECT * FROM tblTag t
                  WHERE t.tagName = '$var_tagCollectInsert'));
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]