sql >> Databasteknik >  >> RDS >> Mysql

Flytta data från en MySQL-tabell till en annan

För det första saknar du en parentes, som du inte alls behöver använda i det här fallet

Ändra din frågesträng till

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

eller till bara

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

Här är SQLFiddle demo

För det andra INSERT returnerar inte en resultatuppsättning så du bör inte använda mysql_fetch_array() .

För det tredje om din avsikt var att flytta inte bara för att kopiera data så måste du också radera raden som du kopierade efteråt.

Nu kan du lägga allt i en lagrad procedur

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 ;

Exempel på användning:

CALL move_to_archive(2);

Här är SQLFiddle demo



  1. mysql hur man får 2:a högsta värdet med grupp av och i en vänster join

  2. Standardsträngar för numeriskt format som stöds av FORMAT() i SQL Server

  3. få poster av en och endast en typ

  4. Relationell databas designa flera användartyper