2012-04-11 27 views
1

我能夠克隆行中我的表下面的代碼:克隆MySQL的行加上新的唯一ID

$uuid = 'blahblah';  
INSERT INTO events (title, subtitle) SELECT title, subtitle FROM events WHERE uuid = '$uuid' 

不過,我想生成新克隆的行新的唯一ID。該表列的名稱是「uuid」如何在克隆過程中插入新的唯一ID?我有一個INT類型的自動索引列,但我也有一個VARCHAR類型的唯一ID列,用於每行(混合字母數字)。

在此先感謝。

回答

-1

我是一個Oracle的傢伙,所以採取周密,但我會做這樣的事情:

INSERT INTO events (id, title, subtitle) 
SELECT nextval('sequence_name'), title, subtitle 
    FROM events 
WHERE uuid = '$uuid' 
+0

MySQL沒有NEXTVAL函數。 – 2016-04-01 14:32:00

0
/* 
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'); 
+0

除了代碼,你的答案可能應該包含一些解釋(?)... – poplitea 2016-12-29 18:19:47