Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verschieben Sie Daten von einer MySQL-Tabelle in eine andere

Erstens fehlt Ihnen eine Klammer, die Sie in diesem Fall überhaupt nicht verwenden müssen

Ändern Sie Ihre Abfragezeichenfolge in

Insert Into archived (select * from registrations WHERE id=$id)
                     ^                                        ^

oder einfach zu

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

Hier ist SQLFiddle Demo

Zweitens INSERT gibt keine Ergebnismenge zurück, daher sollten Sie mysql_fetch_array() nicht verwenden .

Drittens, wenn Sie umziehen wollten nicht nur um Daten zu kopieren, dann müssen Sie auch die kopierte Zeile danach löschen.

Jetzt können Sie alles in eine gespeicherte Prozedur packen

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 ;

Beispielverwendung:

CALL move_to_archive(2);

Hier ist SQLFiddle Demo