Di MySQL saya mencoba menyalin baris dengan autoincrement column ID=1
dan memasukkan data ke tabel yang sama dengan baris baru column ID=2
.
Bagaimana saya bisa melakukan ini dalam satu permintaan?
Gunakan INSERT ... SELECT
:
insert into your_table (c1, c2, ...)
select c1, c2, ...
from your_table
where id = 1
di mana c1, c2, ...
semua kolom kecuali id
. Jika Anda ingin secara eksplisit memasukkan dengan angka id
2 maka sertakan dalam daftar kolom INSERT dan SELECT Anda:
insert into your_table (id, c1, c2, ...)
select 2, c1, c2, ...
from your_table
where id = 1
Anda harus mengurus kemungkinan duplikat id
2 dalam kasus kedua tentu saja.
IMO, yang terbaik tampaknya menggunakan pernyataan sql hanya untuk menyalin baris itu, sementara pada saat yang sama hanya mereferensikan kolom yang harus dan ingin Anda ubah.
Lihat juga av8n.com - Cara Mengkloning Catatan SQL
Manfaat:
your_table
dalam satu operasi atom.sumber
Error Code: 1113. A table must have at least 1 column
.SET id=NULL
dapat menyebabkan kesalahanColumn 'id' cannot be null
. Harus diganti olehUPDATE temp_table SET id = (SELECT MAX(id) + 1 as id FROM your_table);
Katakanlah tabelnya
user(id, user_name, user_email)
.Anda dapat menggunakan kueri ini:
sumber
Result: near "SELECT": syntax error
Ini membantu dan mendukung kolom BLOB / TEXT.
sumber
Untuk solusi cepat dan bersih yang tidak mengharuskan Anda memberi nama kolom, Anda dapat menggunakan pernyataan yang disiapkan seperti dijelaskan di sini: https://stackoverflow.com/a/23964285/292677
Jika Anda membutuhkan solusi yang kompleks sehingga Anda bisa sering melakukan ini, Anda dapat menggunakan prosedur ini:
Anda dapat menjalankannya dengan:
Contohnya
PENOLAKAN: Solusi ini hanya untuk seseorang yang akan berulang kali menduplikasi baris di banyak tabel, sering. Ini bisa berbahaya di tangan pengguna nakal.
sumber
Anda juga dapat memasukkan '0' sebagai nilai untuk penambahan kolom, nilai yang benar akan digunakan ketika catatan dibuat. Ini jauh lebih mudah daripada tabel sementara.
Sumber: Menyalin baris di MySQL (lihat komentar kedua, oleh TRiG, untuk solusi pertama, oleh Lore)
sumber
Banyak jawaban bagus di sini. Di bawah ini adalah contoh dari prosedur tersimpan yang saya tulis untuk menyelesaikan tugas ini untuk Aplikasi Web yang saya kembangkan:
sumber
sumber
Jika Anda dapat menggunakan MySQL Workbench, Anda dapat melakukan ini dengan mengklik kanan baris dan memilih 'Salin baris', lalu mengklik kanan baris kosong dan memilih 'Tempel baris', lalu mengubah ID, dan kemudian mengklik 'Terapkan'.
Salin baris:
Rekatkan baris yang disalin ke baris kosong:
Ubah ID:
Menerapkan:
sumber
Saya mencari fitur yang sama tetapi saya tidak menggunakan MySQL. Saya ingin menyalin SEMUA bidang kecuali tentu saja kunci utama (id). Ini adalah permintaan sekali pakai, tidak untuk digunakan dalam skrip atau kode apa pun.
Saya menemukan jalan saya dengan PL / SQL tapi saya yakin IDE SQL lainnya akan melakukannya. Saya melakukan dasar
Kemudian ekspor ke file SQL di mana saya dapat menemukan
Saya baru saja mengeditnya dan menggunakannya:
sumber
Saya cenderung menggunakan variasi dari apa yang terlalu pendek diposting:
Selama tabel memiliki bidang yang identik (kecuali kenaikan otomatis pada tabel log), maka ini berfungsi dengan baik.
Karena saya menggunakan prosedur tersimpan sedapat mungkin (untuk membuat hidup lebih mudah pada programmer lain yang tidak terlalu terbiasa dengan database), ini memecahkan masalah harus kembali dan memperbarui prosedur setiap kali Anda menambahkan bidang baru ke tabel.
Ini juga memastikan bahwa jika Anda menambahkan bidang baru ke tabel, bidang itu akan segera muncul di tabel log tanpa harus memperbarui kueri basis data Anda (kecuali tentu saja Anda memiliki beberapa yang menetapkan bidang secara eksplisit)
Peringatan: Anda akan ingin memastikan untuk menambahkan bidang baru ke kedua tabel pada saat yang sama sehingga urutan bidang tetap sama ... jika tidak, Anda akan mulai mendapatkan bug aneh. Jika Anda adalah satu-satunya yang menulis antarmuka database DAN Anda sangat berhati-hati maka ini berfungsi dengan baik. Jika tidak, tetap gunakan penamaan semua bidang Anda.
Catatan: Setelah dipikir-pikir, kecuali jika Anda mengerjakan proyek solo yang Anda yakin tidak akan membuat orang lain mengerjakannya, cantumkan semua nama bidang secara eksplisit dan perbarui laporan log Anda saat skema Anda berubah. Jalan pintas ini mungkin tidak sebanding dengan sakit kepala jangka panjang yang dapat ditimbulkannya ... terutama pada sistem produksi.
sumber
sumber
Buang baris yang ingin Anda sql dan kemudian gunakan SQL yang dihasilkan, kurangi kolom ID untuk mengimpornya kembali.
sumber