2012-04-11 2 views
1

Я могу клонировать строку в моей таблице со следующим кодом:Clone MySQL строка плюс нового уникальный идентификатор

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

Однако, я хочу, чтобы создать новый уникальный идентификатор для нового клонированной строки. Имя этого столбца таблицы «uuid». Как вставить новый уникальный идентификатор во время процесса клонирования? У меня есть индекс auto indext типа INT, но у меня также есть уникальный столбец идентификатора типа VARCHAR для каждой строки (смешанный буквенно-цифровой).

Заранее спасибо.

ответ

-1

Я являюсь парень Oracle, поэтому примите это к сведению, но я сделаю это что-то вроде этого:

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

У MySQL нет функции NEXTVAL. –

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