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

时间:2017-03-10 15:16:03

标签: mysql auto-increment insert-into

我有两张桌子的结构相同,但内容不同。每个表的第一列是自动增量ID。

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

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

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

我不能只选择表2中的ID,如上所示,因为这会在表1中创建重复的ID。

我试过更换“id'用:(SELECT MAX(id)+1 FROM table_1) AS id。这会获得正确的ID,但不会为要插入的每一行增加它。

我已尝试过(SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA_TABLES WHERE SCHEMA_TABLE = 'table_1') AS id,但却未能说出“无法解析列AUTO_INCREMENT'

我试过了LAST_INSERT_ID() as id。这实际上是在我第一次运行该语句时有效,但是进一步的尝试失败了,并且消息' Duplicate entry 875 for key PRIMARY'

最后,我试图将列完全删除,但我收到一条错误消息,指出列数不匹配。

任何人都可以对此有所了解吗?我应该指出我需要纯MySQL。我不在PHP的上下文中。

由于

2 个答案:

答案 0 :(得分:1)

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

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'

答案 1 :(得分:0)

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

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'

在table2中自动生成ID,它将自动获取值。