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
)