克隆MySQL行加上新的唯一ID
我可以使用以下代码克隆表中的一行:克隆MySQL行加上新的唯一ID,mysql,clone,Mysql,Clone,我可以使用以下代码克隆表中的一行: $uuid = 'blahblah'; INSERT INTO events (title, subtitle) SELECT title, subtitle FROM events WHERE uuid = '$uuid' 但是,我想为新克隆的行生成一个新的唯一ID。此表列的名称为“uuid”。如何在克隆过程中插入新的唯一ID?我有一个INT类型的自动索引列,但对于每一行,我也有一个VARCHAR类型的唯一ID列(混合字母数字) 提前谢谢。我在这里
$uuid = 'blahblah';
INSERT INTO events (title, subtitle) SELECT title, subtitle FROM events WHERE uuid = '$uuid'
但是,我想为新克隆的行生成一个新的唯一ID。此表列的名称为“uuid”。如何在克隆过程中插入新的唯一ID?我有一个INT类型的自动索引列,但对于每一行,我也有一个VARCHAR类型的唯一ID列(混合字母数字)
提前谢谢。我在这里找到了答案-
基本上,选择除ID之外的所有内容,只要主键设置为自动递增-应该不会有问题。除了代码,您的答案可能还包含一些解释(?)。很好的解决方案,这就是问题所在。相反,被接受的答案需要PHP。你的问题不是关于PHP的,标签中的PHP也不是。那么只使用MySQL的解决方案呢?这里提供的答案很明显,还需要两个查询:选择然后插入,这与准备好的语句大约只有10行。@undefined您清楚地只能阅读此链接的标题。如果您真的这样做了,您将看到接受的解决方案是MySQL解决方案代码>看起来不像MySQL。如果您使用的是PHP,那么这个插入查询很可能倾向于SQL注入。
/*
eduardoaf.com
https://github.com/eacevedof/
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS `prc_clone_row`$$
CREATE PROCEDURE `prc_clone_row`(
sTableName VARCHAR(25)
,sId VARCHAR(5)
)
BEGIN
SET @sSQL := CONCAT('SELECT (MAX(id)+1) AS idnew FROM ',sTableName,' INTO @sIdNew');
PREPARE sExecute FROM @sSQL;
EXECUTE sExecute;
IF (@sIdNew IS NOT NULL) THEN
SET @sSQL := CONCAT('CREATE TEMPORARY TABLE tempo_table SELECT * FROM ',sTableName,' WHERE id = ',sId,'; ');
PREPARE sExecute FROM @sSQL;
EXECUTE sExecute;
SET @sSQL := CONCAT('UPDATE tempo_table SET id=',@sIdNew,' WHERE id=',sId,'; ');
PREPARE sExecute FROM @sSQL;
EXECUTE sExecute;
SET @sSQL := CONCAT('INSERT INTO ',sTableName,' SELECT * FROM tempo_table WHERE id=',@sIdNew,'; ');
PREPARE sExecute FROM @sSQL;
EXECUTE sExecute;
SET @sSQL := CONCAT('SELECT * FROM ',sTableName,' ORDER BY id DESC;');
PREPARE sExecute FROM @sSQL;
EXECUTE sExecute;
ELSE
SELECT CONCAT('TABLE ',sTableName,' IS EMPTY!!!') AS msg;
END IF;
END$$
DELIMITER ;
CALL prc_clone_row('app_cms_content','1');