Giả sử bảng của bạn có các trường sau:
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
sau đó, để sao chép giá trị từ hàng này sang hàng khác với giá trị khóa mới, truy vấn sau có thể hữu ích
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
Điều này sẽ tạo ra một giá trị mới cho pk_id
trường và sao chép các giá trị từ col1
và col2
của hàng đã chọn.
Bạn có thể mở rộng mẫu này để áp dụng cho nhiều trường hơn trong bảng.
CẬP NHẬT :
Đối với những nhận xét từ JohnP và Martin -
Chúng ta có thể sử dụng bảng tạm thời để đệm trước từ bảng chính và sử dụng nó để sao chép lại vào bảng chính. Việc cập nhật trường tham chiếu pk trong bảng tạm thời sẽ không hữu ích vì nó có thể đã có trong bảng chính. Thay vào đó, chúng ta có thể bỏ trường pk khỏi bảng tạm thời và sao chép tất cả các trường khác vào bảng chính.
Tham khảo câu trả lời của Tim Ruehsen trong bài đăng được giới thiệu :
CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;
Hy vọng điều này sẽ hữu ích.