Saya mencoba memindahkan data lama dari:
this_table >> this_table_archive
menyalin semua kolom. Saya sudah mencoba ini, tetapi tidak berhasil:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
Catatan: tabelnya identik dan telah id
ditetapkan sebagai kunci utama.
mysql
select
insert-into
Kyle
sumber
sumber
Jawaban:
Sintaks yang benar dijelaskan di manual . Coba ini:
Jika kolom id adalah kolom auto-increment dan Anda sudah memiliki beberapa data di kedua tabel, maka dalam beberapa kasus Anda mungkin ingin menghilangkan id dari daftar kolom dan membuat id baru sebagai gantinya untuk menghindari memasukkan id yang sudah ada di aslinya meja. Jika tabel target Anda kosong maka ini tidak akan menjadi masalah.
sumber
Untuk sintaksnya, ini terlihat seperti ini (biarkan daftar kolom secara implisit berarti "semua")
Untuk menghindari kesalahan kunci primer jika Anda sudah memiliki data di tabel arsip
sumber
Penambahan jawaban Mark Byers:
Kadang-kadang Anda juga ingin memasukkan detail Hardcode yang lain mungkin ada kendala Unik gagal dll. Jadi gunakan berikut ini dalam situasi seperti di mana Anda mengganti beberapa nilai kolom.
Di sini nilai domain ditambahkan oleh saya dengan cara Hardcode untuk menyingkirkan kendala Unik.
sumber
tidakkah Anda membutuhkan double () untuk nilai bit? jika tidak coba ini (walaupun pasti ada cara yang lebih baik
sumber
INSERT INTO .. SELECT FROM
, bukanINSERT INTO .. VALUES
. Fitur berbeda.Lebih Banyak Contoh & Detail
sumber