Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mover dados de uma tabela MySQL para outra


Em primeiro lugar, está faltando um parêntese, que você não precisa usar neste caso

Altere sua string de consulta para
Insert Into archived (select * from registrations WHERE id=$id)
                     ^                                        ^

ou apenas
Insert Into archived select * from registrations WHERE id=$id

Aqui está SQLFiddle demonstração

Em segundo lugar INSERT não retorna um conjunto de resultados, então você não deve usar mysql_fetch_array() .

Em terceiro lugar, se sua intenção era mover não apenas para copiar dados, você também precisa excluir a linha que você copiou posteriormente.

Agora você pode colocar tudo em um procedimento armazenado
DELIMITER $$
CREATE PROCEDURE move_to_archive(IN _id INT)
BEGIN
    START TRANSACTION;
    INSERT INTO archived 
    SELECT * 
      FROM registrations 
     WHERE id = _id;
    DELETE
      FROM registrations 
     WHERE id = _id;
    COMMIT;
END$$
DELIMITER ;

Exemplo de uso:
CALL move_to_archive(2);

Aqui está SQLFiddle demonstração