Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Membuat tipe variabel ENUM di MySQL

Tidak. MySQL tidak mendukung CREATE DOMAIN atau CREATE TYPE seperti, misalnya, PostgreSQL dilakukan .

Anda mungkin harus memasukkan semua nama lagi. Anda dapat mengurangi pekerjaan yang diperlukan untuk melakukan ini dengan menggunakan salin &tempel, atau skrip SQL.

Anda juga dapat menggunakan INFORMATION_SCHEMA tabel untuk mendapatkan teks definisi ENUM, dan kemudian menginterpolasinya menjadi CREATE TABLE baru pernyataan.

Anda juga dapat menggunakan CREATE TABLE AS dengan cara kreatif untuk menyalin definisi tipe. Berikut demonstrasinya:

CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;

Keluaran:

CREATE TABLE `bar` (
  `b` enum('abc','xyz') default NULL
) 

Akhirnya, saya menyarankan bahwa jika ENUM Anda memiliki banyak nilai di dalamnya (yang saya duga benar karena Anda mencari solusi untuk menghindari mengetiknya), Anda mungkin harus menggunakan tabel pencarian alih-alih tipe data ENUM.

Komentar ulang dari @bliako:

Anda dapat melakukan apa yang Anda gambarkan dengan cara ini:

CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;

Saya mencoba ini di MySQL 5.7.27, dan berhasil.

Sangat menarik untuk dicatat bahwa Anda tidak harus mendeklarasikan ketiga kolom di baris CREATE TABLE. Kolom ketiga f akan ditambahkan secara otomatis.

Menarik juga bahwa saya harus memberikan alias kolom di SELECT pernyataan untuk memastikan nama kolom cocok dengan yang dideklarasikan di CREATE TABLE . Jika tidak, jika nama kolom tidak cocok, Anda akan mendapatkan kolom tambahan, dan tipe datanya tidak seperti yang Anda harapkan:

create table bar (pop int not null, name varchar(100)) 
as select 0 as c1, null as c2, f from foo;

show create table bar\G

CREATE TABLE `bar` (
  `pop` int(11) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `c1` binary(0) DEFAULT NULL,
  `c2` binary(0) DEFAULT NULL,
  `f` enum('abc','xyz') DEFAULT NULL
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan antara zona waktu Amerika/Los_Angeles dan AS/Pasifik dan PST8PDT?

  2. Cari semua kemunculan string dalam database mysql

  3. Tanggal MySQL atau waktu PHP?

  4. Menggunakan MySql dengan Entity Framework 4 dan Code-First Development CTP

  5. TIMESTAMPADD() Contoh – MySQL