在MySQL中,我试图复制一行自增量列ID=1,并将数据插入到相同的表中,作为列ID=2的新行。
如何在单个查询中做到这一点?
在MySQL中,我试图复制一行自增量列ID=1,并将数据插入到相同的表中,作为列ID=2的新行。
如何在单个查询中做到这一点?
当前回答
假设表是user(id, user_name, user_email)。
你可以使用这个查询:
INSERT INTO user (SELECT NULL,user_name, user_email FROM user WHERE id = 1)
其他回答
我正在寻找相同的功能,但我不使用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);
这有助于,它支持BLOB/TEXT列。
CREATE TEMPORARY TABLE temp_table
AS
SELECT * FROM source_table WHERE id=2;
UPDATE temp_table SET id=NULL WHERE id=2;
INSERT INTO source_table SELECT * FROM temp_table;
DROP TEMPORARY TABLE temp_table;
USE source_table;
这里有很多很棒的答案。下面是我为正在开发的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 INTO test_table (SELECT null,txt FROM test_table)
每次运行此查询时,这将再次插入所有具有新id的行。值将呈指数增长。
我使用了一个有两列的表,即id和txt, id是自动递增的。
如果你能使用MySQL Workbench,你可以通过右键单击行并选择“复制行”,然后右键单击空行并选择“粘贴行”,然后更改ID,然后单击“应用”来做到这一点。
复制行:
将复制的行粘贴到空白行:
更改ID:
应用: