Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przenieś dane z jednej tabeli MySQL do drugiej

Po pierwsze brakuje Ci jednego nawiasu, którego w tym przypadku nie musisz używać

Zmień ciąg zapytania na

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

lub po prostu

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

Oto SQLFiddle demo

Po drugie INSERT nie zwraca zestawu wyników, więc nie powinieneś używać mysql_fetch_array() .

Po trzecie, jeśli Twoim zamiarem było przeprowadzka nie tylko po to, aby skopiować dane, ale musisz również usunąć wiersz, który skopiowałeś później.

Teraz możesz umieścić to wszystko w procedurze składowanej

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 ;

Przykładowe użycie:

CALL move_to_archive(2);

Oto SQLFiddle demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql dla Pythona 2. 7 mówi, że nie znaleziono Pythona v2.7

  2. Nieznana tabela w MULTI DELETE

  3. MySQL:jak uzyskać x liczbę wyników na grupowanie

  4. Niedozwolone przesunięcie ciągu 'name' laravel

  5. Jak zrobić zbiorcze wstawianie w mySQL za pomocą node.js?