Mysql 将新行插入SQL表的正确方法,但仅当该行对不存在时

Mysql 将新行插入SQL表的正确方法,但仅当该行对不存在时,mysql,Mysql,这一点以前已经讨论过,但是我无法理解我找到的答案 基本上,我有一个表,有三列memo、user和keyid(最后一列是primary和AUTO_INC)。我插入一对值(memo和user)。但是,如果我尝试再次插入同一对,它就不会发生 从我发现的情况来看,实现这一点的方法都依赖于一个唯一的键(我在keyid中得到了这个键),但我不明白的是,您仍然需要进行第二次查询才能获得现有夫妇的keyid(或者什么也得不到,在这种情况下,您可以继续插入) 有没有办法在一个查询中完成所有这些?还是我理解错了(使

这一点以前已经讨论过,但是我无法理解我找到的答案

基本上,我有一个表,有三列memo、user和keyid(最后一列是primary和AUTO_INC)。我插入一对值(memo和user)。但是,如果我尝试再次插入同一对,它就不会发生

从我发现的情况来看,实现这一点的方法都依赖于一个唯一的键(我在keyid中得到了这个键),但我不明白的是,您仍然需要进行第二次查询才能获得现有夫妇的keyid(或者什么也得不到,在这种情况下,您可以继续插入)


有没有办法在一个查询中完成所有这些?还是我理解错了(使用替换或忽略)我读到的内容?

您需要在user+memo上设置一个唯一键

ALTER TABLE mytable
ADD CONSTRAINT unique_user_memo UNIQUE (memo,user)

然后在插入时根据需要使用
INSERT IGNORE
REPLACE
。您当前的唯一密钥是主键,这很好,但您需要第二个密钥,以便不允许插入重复数据。如果不在两列上同时创建新的唯一键,则在每次插入之前需要执行
选择
查询,以检查该对是否已存在。

在您的情况下,该对由
备注,user
定义。但是,您有一个主键(也是唯一的),它是
自动递增的
——这意味着您永远不会得到相同的主键。但是,您可以得到相同的组合
备忘录,user
。为了防止出现这种情况,您需要添加另一个键-
UNIQUE(memo,user)
。现在,您不能拥有相同的备忘录和用户,您可以执行诸如“在重复密钥更新时插入”之类的查询。然而,这样的一对可能不是最理想的,在不了解更多细节(备忘录和用户的数据类型)的情况下,这是我所能帮助您的。非常感谢!!现在天气晴朗!