Saya baru saja mengimpor sekumpulan data ke tabel MySQL dan saya memiliki kolom "GUID" yang pada dasarnya ingin saya isi semua baris yang ada dengan GUID acak yang baru dan unik.
Bagaimana saya melakukan ini di MySQL?
Saya mencoba
UPDATE db.tablename
SET columnID = UUID()
where columnID is not null
Dan dapatkan setiap bidang yang sama
Jawaban:
Saya tidak yakin apakah itu cara termudah, tetapi berhasil. Idenya adalah untuk membuat pemicu yang melakukan semuanya untuk Anda, kemudian, untuk mengeksekusi kueri yang memperbarui tabel Anda, dan akhirnya melepaskan pemicu ini:
Kemudian jalankan
Dan
DROP TRIGGER beforeYourTableUpdate
;PERBARUI Solusi lain yang tidak menggunakan pemicu, tetapi membutuhkan kunci utama atau indeks unik:
UPDATE sekali lagi: Tampaknya kueri asli Anda juga harus berfungsi (mungkin Anda tidak perlu
WHERE columnID is not null
, jadi semua kode mewah saya tidak diperlukan.sumber
UUID
diterapkan dengan benar (dan saya yakin demikian), Anda harus dapat membuat indeks unik tanpa memeriksa duplikat.Saya memiliki kebutuhan untuk menambahkan kolom kunci utama panduan dalam tabel yang ada dan mengisinya dengan GUID unik dan kueri pembaruan ini dengan pilihan dalam ini berfungsi untuk saya:
Sangat sederhana :-)
sumber
UUID
dibuat berdasarkan mesin dan stempel waktu . Sebagai kueri yang memerlukan waktu milidetik untuk dijalankan, kueri tersebut harus sangat dekat ... tetapi tidak pernah sama ... hal yang baik untuk meyakinkan Anda, adalah menambahkanUNIQUE
indeks ke kolom itu.UPDATE sri_issued_quiz SET quiz_id=uuid();
Solusi yang disetujui memang membuat ID unik, tetapi sekilas terlihat identik, hanya beberapa karakter pertama yang berbeda.
Jika Anda menginginkan kunci yang terlihat berbeda, coba ini:
Saya menggunakan versi MySQL Server: 5.5.40-0 + wheezy1 (Debian)
sumber
SELECT INSERT(INSERT(INSERT(INSERT(MD5(UUID()), 9, 0, '-'), 14, 0, '-'), 19, 0, '-'), 24, 0, '-')
Kueri tidak terlalu bagus tetapi berhasil.sumber
Hanya tambahan kecil untuk dibuat karena saya berakhir dengan hasil yang aneh ketika mencoba memodifikasi UUID saat dibuat. Saya menemukan jawaban oleh Rakesh menjadi sederhana yang bekerja dengan baik, kecuali dalam kasus di mana Anda ingin strip strip.
Sebagai referensi:
Ini bekerja dengan sendirinya dengan sempurna. Tetapi ketika saya mencoba ini:
Kemudian semua nilai yang dihasilkan sama (tidak sedikit berbeda - saya empat kali lipat memeriksa dengan
GROUP BY some_field
kueri). Tidak peduli bagaimana saya menempatkan tanda kurung, hal yang sama terjadi.Tampaknya saat mengelilingi subkueri untuk menghasilkan UUID dengan REPLACE, itu hanya menjalankan kueri UUID sekali, yang mungkin masuk akal sebagai pengoptimalan bagi pengembang yang jauh lebih cerdas daripada saya, tetapi tidak bagi saya.
Untuk mengatasi ini, saya hanya membaginya menjadi dua kueri:
Solusi sederhana, jelas, tapi mudah-mudahan ini akan menyelamatkan seseorang dari waktu yang hilang.
sumber
Sepertinya salah ketik. Bukankah yang Anda maksud adalah "... di mana columnId adalah null"?
sumber
WHERE
klausul. Dan nilai-nilai yang dihasilkan sangat mirip, sehingga harus dilihat lebih dekat untuk melihat bahwa keduanya memang berbeda.Saya menghadapi sebagian besar masalah yang sama. Im kasus saya uuid disimpan sebagai BINARY (16) dan TIDAK memiliki kendala UNIK NULL. Dan saya menghadapi masalah ketika UUID yang sama dibuat untuk setiap baris, dan kendala UNIK tidak memungkinkan ini. Jadi kueri ini tidak berfungsi:
UNHEX(REPLACE(uuid(), '-', ''))
Tetapi bagi saya itu berhasil, ketika saya menggunakan kueri seperti itu dengan pemilihan dalam bersarang:
UNHEX(REPLACE((SELECT uuid()), '-', ''))
Kemudian dihasilkan hasil yang unik untuk setiap entri.
sumber
sumber
MYsql UPDATE tablename SET columnName = UUID ()
Oracle UPDATE tablename SET columnName = SYS_GUID ();
SQLSERVER UPDATE tablename SET columnName = NEWID () ;;
sumber
sumber