这是桌子
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
任何想法?
谢谢
这是桌子
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
任何想法?
谢谢
您可以先通过SELECT
ing 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
放入语句中,您将不会收到错误 - 查询将被删除。在复杂的查询中,这也可能隐藏其他可能有用的错误,所以如果你想使用它,最好加倍确保你的代码是正确的。