MySQL - 插入带有 AUTO_INCREMENT 列的 xxx SELECT

标签 mysql select insert auto-increment

我有一个旧表和一个新表:

CREATE TABLE `old_table` (
        `id` bigint(20) NOT NULL AUTO_INCREMENT,
        `col1` varchar(15) DEFAULT NULL,
        `col2` int(15) DEFAULT NULL,
        ...,
        PREMARY_KEY (`id`)
);

CREATE TABLE `new_table` LIKE `old_table`;

然后两个表都填充了一些值。之后,我想从 old_table 中选择一些行并插入到 new_table 中:

INSERT INTO `old_table` SELECT * FROM `new_table` WHERE col2 > 100;

但是这样会因为重复key而导致错误。我懒得在 SELECT 子句中指定列,因为在实际系统中表有很多列。

解决该问题的最佳方法是什么?

最佳答案

set @sql =  (select concat('insert into new_table SELECT NULL,',
             group_concat(column_name),' from ','old_table') from information_schema.columns
         where table_name = 'old_table' and table_schema = '<database>' and column_name != 'id'
             order by ordinal_position);

prepare stmt1 from @sql;
execute stmt1;
deallocate prepare stmt1;

在哪里

<database> - your database

Select all columns except one in MySQL?

How to insert data from an EXECUTE statement in mySql?

关于MySQL - 插入带有 AUTO_INCREMENT 列的 xxx SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11565316/

相关文章:

mysql - 从 3 个表中选择两个 order by 之前两个 group by

c# - 数据表选择 : Expression with a space problem

javascript - Jquery-nice-select 插件无法正常工作

powershell - 使用 PowerShell 在长文本文件的顶部插入一行文本

php - 使用 PHP 将数据从 HTML 表单传递到 MySQL 数据库

php - 更新父行时子行消失

php - 基本创建表MYSQL语法错误

vim - inoremap : variable timeoutlen

mysql - 当不在另一个表中时从一个表中选择用户

mysql - 使用随机数高效更新 mySQL 中的 450k 行