Mysql 如何“复制”特定表中的行(同时自动分配新ID)?

Mysql 如何“复制”特定表中的行(同时自动分配新ID)?,mysql,sql,Mysql,Sql,我需要创建一个表中许多记录的相同副本。该表有一个PK id,当然在新复制的记录中会有所不同 例如,假设我有一个scrum_card表,其中包含以下非唯一列:name、description、board_id 我有一个记录id的动态数组,我希望复制它:[34,56,323445,…] 我如何告诉MYSQL从所有这些记录中获取数据,并对这些记录进行批插入 在人类语法中,它看起来是这样的:从scrum_卡中选择所有的columnsbesides id,其中id是[array of id],然后复制每个

我需要创建一个表中许多记录的相同副本。该表有一个PK id,当然在新复制的记录中会有所不同

例如,假设我有一个scrum_card表,其中包含以下非唯一列:name、description、board_id

我有一个记录id的动态数组,我希望复制它:[34,56,323445,…]

我如何告诉MYSQL从所有这些记录中获取数据,并对这些记录进行批插入


在人类语法中,它看起来是这样的:从scrum_卡中选择所有的columnsbesides id,其中id是[array of id],然后复制每个找到的记录。

您可以使用INSERT,使用Select结果集作为源,而不是一组带有值的文字行元组

INSERT INTO new_table (id, col1, col2, col3...)
SELECT NULL, col1, col2, col3...
FROM old_table
WHERE id IN (34,56,32,3445,...)
使用NULL代替SELECT中的id列将为每行返回NULL,这将导致新的_表生成一个新的id值


但是,除了在中键入列名之外,SQL没有任何方法可以像id以外的所有列那样执行通配符。

您可以使用选择结果集作为源来使用INSERT,而不是一组带有值的文字行元组

INSERT INTO new_table (id, col1, col2, col3...)
SELECT NULL, col1, col2, col3...
FROM old_table
WHERE id IN (34,56,32,3445,...)
使用NULL代替SELECT中的id列将为每行返回NULL,这将导致新的_表生成一个新的id值

但是,除了在中键入列名之外,SQL没有任何方法可以像id以外的所有列那样执行通配符。

使用INSERT INTO。。。选择在列列表中,不包括id:

使用插入到。。。选择在列列表中,不包括id:


id列是自动递增的吗?是的,它是………id列是自动递增的吗?是的,它是………我知道了,我会试试这个。确保:新桌子和旧桌子是同一张桌子,对吗?因为我在同一个表中复制记录。是的,您可以将结果发送到同一个表。我经常这样做是为了生成随机测试数据,比如当我想在一个表中创建100万行时,我从一行开始,然后开始加倍。我明白了,我会试试这个。确保:新桌子和旧桌子是同一张桌子,对吗?因为我在同一个表中复制记录。是的,您可以将结果发送到同一个表。我经常这样做是为了生成随机测试数据,比如当我想在一个表中创建100万行时,我从一行开始,然后开始加倍。有什么方法可以抽象这一点,即不引用列名?我需要在许多表上执行此操作。比尔·卡温(Bill Karwin)说,不可能让mysql选择除id之外的所有内容。不,没有像select*except这样的语句。有没有什么方法可以抽象这一点,也就是说不引用列名?我需要在许多表上执行此操作。比尔·卡温说,不可能让mysql选择除id之外的所有内容。不,没有像select*except这样的语句。