sql >> Database teknologi >  >> RDS >> Mysql

Flyt data fra en MySQL-tabel til en anden

For det første mangler du en parentes, som du slet ikke behøver at bruge i dette tilfælde

Skift din forespørgselsstreng til

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

eller til bare

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

Her er SQLFiddle demo

For det andet INSERT returnerer ikke et resultatsæt, så du bør ikke bruge mysql_fetch_array() .

For det tredje hvis din hensigt var at flytte ikke bare for at kopiere data, så skal du også slette den række, du kopierede bagefter.

Nu kan du lægge det hele i en lagret procedure

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 ;

Eksempel på brug:

CALL move_to_archive(2);

Her er SQLFiddle demo



  1. CakePHP 2.2 med PostgreSQL Mislykkedes ny rækkeindsættelse - Databasefejl:Udefineret tabel:7 FEJL:relation table_id_seq eksisterer ikke

  2. MySQL:Opret database som?

  3. Eksporter forespørgselsresultater til en XML-fil, når du bruger SQLcl (Oracle)

  4. Ændrede PDO::ATTR_EMULATE_PREPARES til FALSE og får fejl med ugyldigt parameternummer