Ne. MySQL nepodporuje CREATE DOMAIN
nebo CREATE TYPE
jako například PostgreSQL dělá
.
Pravděpodobně budete muset všechna jména zadat znovu. Práci, kterou to vyžaduje, můžete zmírnit pomocí kopírování a vkládání nebo skriptů SQL.
Můžete také použít INFORMATION_SCHEMA
tabulky, abyste získali text definice ENUM, a poté jej interpolovali do nové CREATE TABLE
prohlášení.
Můžete také použít CREATE TABLE AS
kreativními způsoby kopírování definice typu. Zde je ukázka:
CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
Výstupy:
CREATE TABLE `bar` (
`b` enum('abc','xyz') default NULL
)
Nakonec navrhuji, že pokud váš ENUM obsahuje mnoho hodnot (což je podle mě pravda, protože hledáte řešení, jak se vyhnout jejich psaní), měli byste pravděpodobně používat vyhledávací tabulku místo datového typu ENUM.
Znovu komentář od @bliako:
To, co popisujete, můžete udělat takto:
CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
Zkoušel jsem to na MySQL 5.7.27 a fungovalo to.
Je zajímavé poznamenat, že v řádku CREATE TABLE nemusíte deklarovat všechny tři sloupce. Třetí sloupec f
budou přidány automaticky.
Je také zajímavé, že jsem musel v SELECT
zadat aliasy sloupců abyste se ujistili, že názvy sloupců odpovídají názvům uvedeným v CREATE TABLE
. V opačném případě, pokud se názvy sloupců neshodují, skončíte se sloupci navíc a jejich datové typy nejsou takové, jaké očekáváte:
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
)