Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Di chuyển dữ liệu từ bảng MySQL này sang bảng khác

Trước hết, bạn đang thiếu một dấu ngoặc đơn, mà bạn không cần phải sử dụng trong trường hợp này

Thay đổi chuỗi truy vấn của bạn thành

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

hoặc chỉ

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

Đây là SQLFiddle bản demo

Thứ hai INSERT không trả về tập kết quả, vì vậy bạn không nên sử dụng mysql_fetch_array() .

Thứ ba nếu mục đích của bạn là di chuyển không chỉ để sao chép dữ liệu, sau đó bạn cũng cần xóa hàng mà bạn đã sao chép sau đó.

Bây giờ bạn có thể đặt tất cả trong một quy trình được lưu trữ

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 ;

Cách sử dụng mẫu:

CALL move_to_archive(2);

Đây là SQLFiddle bản 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. Làm cách nào để bạn giới hạn nhóm theo hàng trong truy vấn mysql?

  2. Làm thế nào để kết nối với Mysql bằng C #?

  3. Máy chủ AWS Aurora đôi khi phản hồi với Cơ sở dữ liệu không xác định:...

  4. Sự cố khi kiểm tra xem một bảng có tồn tại hay không trong db

  5. Làm cách nào để xóa hoặc thay đổi kích thước tệp ibtmp1 trong MySQL?