Saya tidak yakin apakah mengubah daftar ENUM () tidak mungkin jadi saya membuat tes. Di MySQL v5.1.58 saya membuat tabel InnoDB uji yang berisi satu bidang yang disebut 'bool' dari tipe ENUM ('ya', 'tidak').
Lalu aku mengeksekusi ...
ALTER TABLE `test`
CHANGE `bool` `bool` ENUM( 'yes', 'no', 'maybe' )
CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
... dan berhasil.
Apakah saya melakukan kesalahan? Apakah ini tergantung pada mesin db? Mengapa semua orang mengatakan bahwa mengubah daftar ENUM () tidak mungkin? misalnya. di sini http://komlenic.com/244/8-reason-why-mysqls-enum-data-type-is-evil/
Jawaban:
Selama meja kosong, tidak ada masalah. Selama nilai-nilai baru untuk ENUM ditambahkan dan tidak diganti diberi tabel yang diisi, sekali lagi tidak ada masalah.
ENUM yang Anda definisikan ulang dalam pertanyaan Anda benar-benar menyimpan nilai internal asli untuk ya dan tidak sebagaimana tabel tes terakhir mengingatnya.
Hal berikut ini berlaku untuk tabel terisi:
Bagaimana dengan ini?
Sekarang kamu punya masalah. Nilai-nilai ENUM dalam tabel yang terisi penuh akan memiliki nilai internal mereka terbalik sehingga ya sekarang tidak dan tidak sekarang ya.
Bagaimana dengan ini?
Masalah besar. Dalam tabel yang padat, ya sekarang mungkin. Baris baru yang disisipkan dengan yes terputus dari baris ya sebelumnya karena sekarang berarti mungkin.
RINGKASAN
Ada teknik-teknik umpan-dan-saklar yang sangat berisiko tinggi untuk melakukan ini dengan sangat cepat di MyISAM . Saya akan sangat menyarankan untuk tidak melakukan ini di InnoDB karena interaksi tablespace id dengan ibdata1.
sumber
For example, a column specified as ENUM('one', 'two', 'three') can have any of the values shown here. The index of each value is also shown.
dan peta nilai / indeks dikonseptualisasikan. Dengan demikian, akan ada nilai ENUM dalam tabel yang terkait dengan nomor indeks internal. Mengatur ulang string akan mengatur ulang pengindeksan metadata. Ini bukan pertanda baik untuk tabel yang diisi saat mendefinisikan ulang ENUM.