带主键的Mysql克隆行

Joh*_*ace 4 mysql clone row

我有一个带有单个主键(称为pkey)的Mysql表,它自动递增,我想克隆一行,保持所有数据相同,除了主键应该成为auto定义的下一个可用值增量.

我的第一个问题是,以下查询是否可能?

UPDATE `table` SET pkey='next_available_primary_key' WHERE pkey='old_primary_key'
Run Code Online (Sandbox Code Playgroud)

如果尝试过

UPDATE `table` SET pkey=null WHERE pkey='old_primary_key'
Run Code Online (Sandbox Code Playgroud)

但它只将主键的值设置为零.提前感谢您的任何帮助/建议.

更新:

我想我应该补充说,我真的不想要表中的两个数据副本.我只想更改主键.因此,如果我使用INSERT SELECT,我将不得不使用ON DUPLICATE KEY UPDATE补偿pkey ='next_available_primary_key'我只是不确定如何做到这一点......

O. *_*nes 7

如果您尝试在表中创建新行,则需要INSERT而不是UPDATE.

这个怎么样?确保您的PKEY设置为自动增量.

INSERT INTO `table` (col,col,col)  /*name all the columns EXCEPT the primary key*/
SELECT col,col,col  /*name all the columns EXCEPT the primary key*/
  FROM 'table`
 WHERE pkey='old_primary_key'
Run Code Online (Sandbox Code Playgroud)

  • 我做了很多这样的事情,我使用元数据(information_schema.COLUMNS)来构建我的查询.如果该列是表的主键的一部分,则为COLUMNS.COLUMN_KEY ='PRI',如果不是,则为空字符串. (2认同)