Bisakah saya mengganti nama nilai dalam kolom ENUM MySQL dalam satu permintaan?
12
Misalkan saya memiliki tabel Database dengan ENUM('value_one','value_two'). Saya ingin mengubahnya menjadi ENUM('First value','Second value'). Saya sedang melakukan itu sebagai berikut:
Teknik yang akan kami tunjukkan tidak didukung, tidak berdokumen, dan mungkin tidak berfungsi. Gunakan dengan risiko Anda. Kami menyarankan Anda untuk mencadangkan data Anda terlebih dahulu!
Cobalah ! (Tolong beri tahu kami bagaimana hasilnya)
UPDATE 2011-10-05 17:49 EDT
Jika tabelnya adalah MyISAM dan Anda memiliki cukup ruang dalam produksi dan jendela down-up langsung, coba ini:
service mysql restart --skip-networking
Dalam Sesi OS / SSH yang terpisah, buat salinan tabel
+1 untuk jawaban yang cerdas! Namun, saya tidak akan mencoba ini dan memberi tahu Anda bagaimana hasilnya karena pertanyaannya mengacu pada skrip pemutakhiran untuk semua pelanggan saya, basis data produksi ;-) Namun, saya dapat mencoba ini hanya di lingkungan pengembangan untuk kesenangan. Tetapi dengan peringatan itu saya tidak pernah menjalankan ini dalam produksi!
Josh
3
Solusi sederhana adalah:
1- tambahkan kolom baru:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Salin nilai kolom ke enum2 dengan penggantian:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3 - Drop kolom column, ganti nama enummenjadi column.
CATATAN : pertanyaan ini kembali ke 2011-10-05, solusi saya valid untuk MYSQL 4.1 dan yang lebih baru (AFAIK)
Walaupun ini terdengar seperti solusi yang baik (dan tidak hampir sama menegangkannya dengan jawaban yang diterima!), Perlu dicatat bahwa langkah 3 memang membutuhkan setidaknya satu ALTER TABLEpernyataan, dan OP sedang mencari sesuatu yang hanya membutuhkan satu. Sekali lagi, itu mengatakan, sepertinya solusi yang benar-benar standar, solid.
Solusi sederhana adalah:
1- tambahkan kolom baru:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Salin nilai kolom ke enum2 dengan penggantian:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3 - Drop kolom
column
, ganti namaenum
menjadicolumn
.CATATAN : pertanyaan ini kembali ke 2011-10-05, solusi saya valid untuk MYSQL 4.1 dan yang lebih baru (AFAIK)
sumber
ALTER TABLE
pernyataan, dan OP sedang mencari sesuatu yang hanya membutuhkan satu. Sekali lagi, itu mengatakan, sepertinya solusi yang benar-benar standar, solid.