Python mysql在ins之前检查重复

2024-04-27 21:05:34 发布

您现在位置:Python中文网/ 问答频道 /正文

这是桌子

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表

知道吗?

谢谢


Tags: idurlautodatetimedateifcreateexists
1条回答
网友
1楼 · 发布于 2024-04-27 21:05:34

您可以通过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放入语句中,则不会出现错误,查询将被删除。在复杂的查询中,这也可能隐藏其他可能有用的错误,因此如果您想使用代码,最好确保代码是正确的。

相关问题 更多 >