3

这是桌子

CREATE TABLE IF NOT EXISTS kompas_url
(
    id  BIGINT(20) NOT NULL AUTO_INCREMENT,
    url VARCHAR(1000),
    created_date datetime,
    modified_date datetime,
    PRIMARY KEY(id)
)

仅当 url 尚不存在时,我才尝试对 kompas_url 表执行 INSERT

任何想法?

谢谢

4

1 回答 1

9

您可以先通过SELECTing by确定它是否在其中url,也可以使该url字段独一无二:

CREATE TABLE IF NOT EXISTS kompas_url
    ...
    url VARCHAR(1000) UNIQUE,
    ...
)

这将阻止 MySQL 插入重复的行,但是当您尝试插入时它也会报告错误。这不好——尽管我们可以处理错误,但它可能会掩盖其他错误。为了解决这个问题,我们使用以下ON DUPLICATE KEY UPDATE语法:

INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()

这允许我们在唯一字段(这可以包括您的主键)中出现重复值的情况下提供UPDATE声明。在这种情况下,我们可能希望modified_date用当前日期更新该字段。

编辑:正如~unutbu所建议的那样,如果您不想更改副本上的任何内容,则可以使用INSERT IGNORE语法。这简单地工作如下:

INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())

这只是将某些类型的错误转化为警告—​​—最有用的是,错误表明存在重复的唯一条目。如果您将关键字IGNORE放入语句中,您将不会收到错误 - 查询将被删除。在复杂的查询中,这也可能隐藏其他可能有用的错误,所以如果你想使用它,最好加倍确保你的代码是正确的。

于 2010-04-02T01:18:13.473 回答