检查行是否存在,如果不存在,则添加它[MySQL]

检查行是否存在,如果不存在,则添加它[MySQL],mysql,insert,Mysql,Insert,我需要向MySQL数据库表中添加一行,但前提是该行不存在。我的数据库服务器刚刚宕机,所以我无法测试它,但这会像预期的那样工作吗 INSERT INTO `blocks` (`block_file`,`settings_group`) VALUES ('announcements','announcement_settings') WHERE NOT EXISTS (SELECT `block_file`,`settings_group` FROM `block

我需要向MySQL数据库表中添加一行,但前提是该行不存在。我的数据库服务器刚刚宕机,所以我无法测试它,但这会像预期的那样工作吗

INSERT INTO `blocks` (`block_file`,`settings_group`)
VALUES ('announcements','announcement_settings')
WHERE NOT EXISTS (SELECT `block_file`,`settings_group`
                  FROM `blocks`
                  WHERE `block_file`='announcements' AND `settings_group`='announcement_settings')

这似乎是合理的逻辑。这是一个有效的查询还是有更好的方法来实现这一点?

只需在
(block\u file,settings\u group)
列上创建唯一索引,MySQL将永远不会允许您插入与这些值重复的行


回答这个问题:不,它根本不起作用。

只需在
(block\u file,settings\u group)
列上创建唯一索引,MySQL将永远不允许您插入与这些值重复的行


回答这个问题:不,它根本不起作用。

在SQL Server中,这种方法会给您一个竞争条件。不确定MySQL是否也是如此。这只是这个特定的查询,还是您总是希望在这两列上强制唯一性?与mysql相同-当您从itIn SQL Server中选择某种类型的方法时,您不能修改表,因为这种方法会给您一个竞争条件。不确定MySQL是否也是如此。这只是一个特定的查询,还是您总是希望在这两列上强制执行唯一性?与mysql相同-您在从中选择时不能修改表,如果需要插入多条记录,只需使用IGNORE关键字,因此如果您尝试插入重复的行,错误将被视为警告。检查sintax谢谢!正如预期的那样工作,而且更干净。如果需要插入多条记录,只需使用IGNORE关键字,因此如果尝试插入重复的行,错误将被视为警告。检查sintax谢谢!就像预期的那样工作,而且更干净。