在MySQL中,我试图复制一行自增量列ID=1,并将数据插入到相同的表中,作为列ID=2的新行。

如何在单个查询中做到这一点?


当前回答

您还可以传入'0'作为列的值来自动递增,在创建记录时将使用正确的值。这比临时表简单多了。

来源: 复制MySQL中的行 (见TRiG对第一个解的评论,Lore)

其他回答

转储您想要sql的行,然后使用生成的sql,减去ID列,将其导入。

我正在寻找相同的功能,但我不使用MySQL。我想复制所有的字段,当然除了主键(id)。这是一次性查询,不能在任何脚本或代码中使用。

我找到了PL/SQL的方法,但我相信任何其他SQL IDE都可以做到。我做了一个基本的

SELECT * 
FROM mytable 
WHERE id=42;

然后将其导出到一个SQL文件,在那里我可以找到

INSERT INTO table (col1, col2, col3, ... , col42) 
VALUES (1, 2, 3, ..., 42);

我只是编辑并使用它:

INSERT INTO table (col1, col2, col3, ... , col42) 
VALUES (mysequence.nextval, 2, 3, ..., 42);

这里有很多很棒的答案。下面是我为正在开发的Web应用程序编写的存储过程示例:

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON

-- Create Temporary Table
SELECT * INTO #tempTable FROM <YourTable> WHERE Id = Id

--To trigger the auto increment
UPDATE #tempTable SET Id = NULL 

--Update new data row in #tempTable here!

--Insert duplicate row with modified data back into your table
INSERT INTO <YourTable> SELECT * FROM #tempTable

-- Drop Temporary Table
DROP TABLE #tempTable

使用INSERT…选择:

insert into your_table (c1, c2, ...)
select c1, c2, ...
from your_table
where id = 1

其中c1, c2,…是除id之外的所有列。如果你想显式地插入id为2,那么在你的insert列列表和SELECT中包含它:

insert into your_table (id, c1, c2, ...)
select 2, c1, c2, ...
from your_table
where id = 1

当然,在第二种情况下,您必须注意可能重复的id 2。

如果你能使用MySQL Workbench,你可以通过右键单击行并选择“复制行”,然后右键单击空行并选择“粘贴行”,然后更改ID,然后单击“应用”来做到这一点。

复制行:

将复制的行粘贴到空白行:

更改ID:

应用: