it-swarm-id.com

Apakah mungkin untuk mengubah daftar ENUM ()?

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/

19
Aalex Gabi

Selama meja kosong, tidak ada masalah. Selama nilai-nilai baru untuk ENUM ditambahkan dan tidak diganti namanya diberi tabel terisi, sekali lagi tidak ada masalah.

ENUM yang Anda definisikan ulang dalam pertanyaan Anda benar-benar mempertahankan nilai internal asli untuk ya dan tidak sebagaimana tabel tes terakhir mengingatnya.

Hal berikut ini berlaku untuk tabel terisi:

Bagaimana dengan ini?

ALTER TABLE  `test`
CHANGE  `bool`  `bool` ENUM(  'no',  'yes',  'maybe' )
CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL

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?

ALTER TABLE  `test`
CHANGE  `bool`  `bool` ENUM(  'maybe', 'no',  'yes' )
CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL

Masalah besar. Dalam tabel yang padat, ya mungkin sekarang. Baris baru yang disisipkan dengan yes terputus dari baris ya sebelumnya karena sekarang berarti mungkin.

RINGKASAN

Ada teknik berisiko tinggi, umpan-dan-alihkan untuk melakukan ini dengan sangat cepat di MyISAM . Saya akan sangat menyarankan untuk tidak melakukan ini di InnoDB karena interaksi tablespace id dengan ibdata1.

14
RolandoMySQLDBA