MYSQL 使用 select 插入时如何获得下一个自动增量

MYSQL how to get next auto increment when inserting with select

我有两个table结构相同,但内容不同。每个table的第一列是一个自动递增的id。

我想做的是将一个 table 中的 一些 行插入到另一个中。但是,id 列应该在目标 table 中自动设置,而不是从源中复制。

到目前为止,我使用的是:

INSERT INTO table_1
    SELECT
       id,
       column_2,
       column_3,
       column_4
    FROM table_2
    WHERE column_4 = 'a value'

我不能只 select 来自 table 2 的 ID,因为这会在 table 1 中创建重复的 ID。

我尝试用 (SELECT MAX(id)+1 FROM table_1) AS id 替换 'id'。这得到了正确的 id,但不会为要插入的每一行增加它。

我已经试过 (SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA_TABLES WHERE SCHEMA_TABLE = 'table_1') AS id 但就是失败 'Unable to resolve column AUTO_INCREMENT'

我试过了LAST_INSERT_ID() as id。这实际上在我第一次 运行 语句时起作用,但进一步尝试失败并显示消息 'Duplicate entry 875 for key PRIMARY'

最后,我试图完全忽略该列,但随后收到一条错误消息,指出列数不匹配。

任何人都可以阐明这一点吗?我应该指出,我需要纯 MySQL。我不在 PHP.

的上下文中

谢谢

您必须指定要插入的列,然后您可以将其省略:

INSERT INTO table_1 (column_2, column_3, column_4)
  SELECT column_2, column_3, column_4
    FROM table_2
    WHERE column_4 = 'a value'

您可以在INSERT语句中指定除ID之外的所有列,例如:

INSERT INTO table_1 (column_2, column_3, column_4)
    SELECT
       column_2,
       column_3,
       column_4
    FROM table_2
    WHERE column_4 = 'a value'

由于ID是在table2中自动生成的,所以会自动取值。