在MySQL中,我试图复制一行自增量列ID=1,并将数据插入到相同的表中,作为列ID=2的新行。
如何在单个查询中做到这一点?
在MySQL中,我试图复制一行自增量列ID=1,并将数据插入到相同的表中,作为列ID=2的新行。
如何在单个查询中做到这一点?
当前回答
您还可以传入'0'作为列的值来自动递增,在创建记录时将使用正确的值。这比临时表简单多了。
来源: 复制MySQL中的行 (见TRiG对第一个解的评论,Lore)
其他回答
在我看来,最好的方法似乎是只使用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 MyTable(field1, field2, id_backup)
select field1, field2, uniqueId from MyTable where uniqueId = @Id;
这里有很多很棒的答案。下面是我为正在开发的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
转储您想要sql的行,然后使用生成的sql,减去ID列,将其导入。
假设表是user(id, user_name, user_email)。
你可以使用这个查询:
INSERT INTO user (SELECT NULL,user_name, user_email FROM user WHERE id = 1)