【问题标题】:Insert into database if record doesn't exist? [duplicate]如果记录不存在,插入数据库? [复制]
【发布时间】:2014-08-28 04:45:50
【问题描述】:

我一直在寻找一种方法来尝试这个,到目前为止,最好的答案是使用 INSERT IGNORE 语法,但我的问题是我不会使用 id。

如果你不知道记录id,有没有办法只在它不存在的情况下将记录插入数据库?

例如:我想检查col1 ('Hello') 中的数据是否不存在。

INSERT IGNORE INTO table_name (col1, col2) values ('Hello', 1);

现有记录:

+--------------------+
| table_name         |
+--------------------+
| id  | col1  | col2 |
+--------------------+
| 2   | Hello | 1    |
|     |       |      |

【问题讨论】:

  • 您将INSERTid??..您当前的查询将更新所有行!
  • @NoobEditor 我知道。我在问我怎么能做到这一点没有发生这种情况?
  • @Be0wulf 是的,这个问题就是我要找的。投票认为这是骗局。

标签: mysql insert


【解决方案1】:

我相信ON DUPLICATE KEY UPDATE 适合你的情况

查询示例:

INSERT INTO table_name (id, col1, col2) VALUES (1,'Hello', 1)
ON DUPLICATE KEY UPDATE col1 = col1,col2 = col2;

更新:我在查询中添加了id 列值。此查询检查id=1 是否已存在则不插入,如果不存在则插入

更新


如果要检查 col1 列的重复项,则必须在此列上添加 unique constrain
ALTER TABLE table_name ADD UNIQUE (col1)

所以现在插入和检查重复的查询是:

INSERT INTO table_name (col1, col2) VALUES ('Hello', 1)
ON DUPLICATE KEY UPDATE col1 = col1,col2 = col2;

如果您指定ON DUPLICATE KEY UPDATE,并插入一行 会导致 UNIQUE 索引PRIMARY KEY

中的重复值

【讨论】:

  • 这只是添加了一个新行。我认为是因为没有引用id(主键)?
  • 您不必提供参考id 列,它会自动检查唯一索引或主键中的重复项
  • 好吧,就像我之前说的,它只是添加了一个新行,具有完全相同的数据...
  • 对于这个例子,使用col1 来检查重复数据。我会更新问题。
  • @Ben 在我阅读完您不需要的 cmets 后,别忘了删除它们
【解决方案2】:

您可以使用ON DUPLICATE 插入一条记录,如果存在,它将更新。如果不存在,它将插入 例如:

  Insert into table_name (col1, col2) values ('Hello', 1);
      ON DUPLICATE KEY UPDATE col1=values(col1),col2=values(col2)

【讨论】:

    【解决方案3】:

    你的问题不清楚。 MYSQL 仅适用于 id。如果你想让它在 col1 上工作,那么你可以写这样的东西

    INSERT IGNORE INTO table_name (col1, col2) 
    values ('Hello', 1) WHERE NOT EXISTS ( SELECT col1 from table_name 
                                           WHERE col1 = 'Hello')
    

    但再次添加更多描述以正确回答。

    【讨论】:

    • 这里的"Name"是什么?这是列名吗??
    • OOPS“名称”是列名:)
    • 我得到一个语法错误“unexpected where, end of query or ';'预计”
    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2022-08-06
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多