在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)

其他回答

这有助于,它支持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;
INSERT INTO `dbMyDataBase`.`tblMyTable` 
(
    `IdAutoincrement`, 
    `Column2`, 
    `Column3`, 
    `Column4` 
) 

SELECT 
    NULL,  
    `Column2`, 
    `Column3`, 
    'CustomValue' AS Column4 
FROM `dbMyDataBase`.`tblMyTable` 
WHERE `tblMyTable`.`Column2` = 'UniqueValueOfTheKey' 
; 
/* mySQL 5.6 */

在我看来,最好的方法似乎是只使用sql语句复制该行,同时只引用必须和想要更改的列。

CREATE TEMPORARY TABLE temp_table ENGINE=MEMORY

SELECT * FROM your_table WHERE id=1;
UPDATE temp_table SET id=0; /* Update other values at will. */

INSERT INTO your_table SELECT * FROM temp_table;
DROP TABLE temp_table;

参见av8n.com -如何克隆SQL记录

好处:

SQL语句2只提到在克隆过程中需要更改的字段。他们不了解或不关心其他领域。其他字段只是随大流,没有变化。这使得SQL语句更易于编写、阅读、维护和扩展。 只使用普通的MySQL语句。不需要其他工具或编程语言。 在一次原子操作中将完全正确的记录插入到your_table中。

试试这个:

INSERT INTO test_table (SELECT null,txt FROM test_table)

每次运行此查询时,这将再次插入所有具有新id的行。值将呈指数增长。

我使用了一个有两列的表,即id和txt, id是自动递增的。

假设表是user(id, user_name, user_email)。

你可以使用这个查询:

INSERT INTO user (SELECT NULL,user_name, user_email FROM user WHERE id = 1)