【问题标题】:Insert row only if it doesn't exist already in MySQL仅当 MySQL 中不存在行时才插入行
【发布时间】:2013-09-15 07:06:40
【问题描述】:

我有一个包含两列(idA 和 idB)的表格。该表将 Bs 分配给 As,如下所示:

    A  |  B
    1  |  4
    3  |  2
    3  |  4
    4  |  1
    4  |  3  ...

所以一个 A 可以有多个 B,因此出现在多行中。因此,表不能有主键,我不能使用唯一列。

有没有办法只在不存在相等值对的情况下插入新行,全部在一个查询中?

我尝试了 REPLACE INTO 和 INSERT IGNORE INTO,如 here 所述,但两者似乎都只适用于具有主键的表。

【问题讨论】:

  • 你试过ON DUPLICATE KEY UPDATE吗?
  • "如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中出现重复值,则会执行旧行的更新。" - 不幸的是,我没有主键或唯一索引...
  • 为什么你的表根本没有键?

标签: mysql sql


【解决方案1】:

您可以添加主键!它只需要超过两列,而不仅仅是一列。

ALTER TABLE your_table
ADD PRIMARY KEY(idA, idB)

这将确保您只有两列的唯一记录。

【讨论】:

  • 哇,我不知道。马上试试
  • 请注意索引中列的顺序很重要。如果您在 (cola,colb) 上建立索引并在 where colb=5 上进行查询,则不会使用该索引。索引在一个维度上起作用,然后在另一个维度上起作用。
  • 只是为了确保不要混淆 OP:插入时将考虑索引中的两列。加快 selects 的性能是一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2011-03-25
  • 2017-04-30
  • 2012-12-20
  • 2020-09-08
  • 2013-03-10
相关资源
最近更新 更多