【问题标题】:Using if not exists to insert data from tableA to tableB and return insert ID from tableB使用 if not exists 将数据从 tableA 插入到 tableB 并从 tableB 返回插入 ID
【发布时间】:2013-04-02 10:44:56
【问题描述】:

所以我正在研究这个数据库结构并试图弄清楚这是否是最好的方法。我正在从第 3 方站点提取记录并将它们存储到临时表(tableA)中,然后检查 tableB 中的重复项,然后将非重复项从 tableA 插入到 tableB 中。每次插入记录时,是否有从 tableB 分配的 id?现在我正在寻找按日期插入到 tableB 中的最新记录,然后检索 ID。有没有更有效的方法?

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    您不使用INSERT IGNORE 有什么原因吗?在我看来,您可以取消整个临时表过程......

    +----+------+
    | id | name |
    |----|------|
    |  1 | adam |
    |  2 |  bob |
    |  3 | carl |
    +----+------+
    

    如果id 有唯一约束,那么:

    INSERT IGNORE INTO tableName (id, name) VALUES (3, "carl"), (4, "dave");
    

    ...将导致:

    +----+------+
    | id | name |
    |----|------|
    |  1 | adam |
    |  2 |  bob |
    |  3 | carl |
    |  4 | dave |
    +----+------+
    

    ...而如果你刚刚做了一个INSERT(没有IGNORE 部分),它会给你一个唯一的键约束错误。

    在取回 ID 方面,只需使用:

    SELECT LAST_INSERT_ID()
    

    ...在您每次拨打INSERT IGNORE 之后。

    【讨论】:

      【解决方案2】:

      听起来您想要在表 B 上使用一种称为插入后触发器的东西。这是在向表中插入一行或多行后运行的一段代码。文档是here

      代码是这样的:

      CREATE TRIGGER mytrigger AFTER INSERT ON B
        FOR EACH ROW BEGIN
            -- Do what you want with each row here
        END;
      

      【讨论】:

        猜你喜欢
        • 2014-04-29
        • 1970-01-01
        • 1970-01-01
        • 2014-11-24
        • 1970-01-01
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多