Не. MySQL не поддържа CREATE DOMAIN
или CREATE TYPE
както например PostgreSQL прави
.
Вероятно ще трябва да въведете отново всички имена. Можете да смекчите работата, необходима за това, като използвате копиране и поставяне или SQL скриптове.
Можете също да използвате INFORMATION_SCHEMA
таблици, за да получите текста на дефиницията на ENUM и след това го интерполирайте в нов CREATE TABLE
изявление.
Можете също да използвате CREATE TABLE AS
по творчески начини да копирате дефиниция на тип. Ето демонстрация:
CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
Изходи:
CREATE TABLE `bar` (
`b` enum('abc','xyz') default NULL
)
И накрая, предлагам, че ако вашият ENUM има много стойности в него (което предполагам е вярно, тъй като търсите решение, за да избегнете въвеждането им), вероятно трябва да използвате таблица за търсене вместо типа данни ENUM.
Повторен коментар от @bliako:
Можете да направите това, което описвате по следния начин:
CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
Опитах това на MySQL 5.7.27 и се получи.
Интересно е да се отбележи, че не е нужно да декларирате и трите колони в реда CREATE TABLE. Третата колона f
ще бъдат добавени автоматично.
Интересно е също, че трябваше да дам псевдоними на колони в SELECT
изявление, за да се уверите, че имената на колоните съвпадат с декларираните в CREATE TABLE
. В противен случай, ако имената на колоните не съвпадат, ще получите допълнителни колони и техните типове данни не са това, което очаквате:
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
)