Nej. MySQL understøtter ikke CREATE DOMAIN
eller CREATE TYPE
som for eksempel PostgreSQL gør
.
Du skal sandsynligvis indtaste alle navnene igen. Du kan mindske det arbejde, det kræver at gøre dette ved at bruge copy &paste eller SQL-scripts.
Du kan også bruge INFORMATION_SCHEMA
tabeller for at få teksten til ENUM-definitionen, og derefter interpolere den til en ny CREATE TABLE
erklæring.
Du kan også bruge CREATE TABLE AS
på kreative måder at kopiere en typedefinition. Her er en demonstration:
CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
Udgange:
CREATE TABLE `bar` (
`b` enum('abc','xyz') default NULL
)
Til sidst foreslår jeg, at hvis din ENUM har mange værdier i sig (hvilket jeg gætter på er sandt, da du leder efter en løsning for at undgå at skrive dem), skal du nok bruge en opslagstabel i stedet for ENUM-datatypen.
Re kommentar fra @bliako:
Du kan gøre, hvad du beskriver på denne måde:
CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
Jeg prøvede dette på MySQL 5.7.27, og det virkede.
Det er interessant at bemærke, at du ikke behøver at erklære alle tre kolonner i linjen CREATE TABLE. Den tredje kolonne f
tilføjes automatisk.
Det er også interessant, at jeg var nødt til at give kolonnealiaser i SELECT
sætning for at sikre, at kolonnenavnene matcher dem, der er erklæret i CREATE TABLE
. Ellers, hvis kolonnenavnene ikke stemmer overens, ender du med ekstra kolonner, og deres datatyper er ikke, hvad du forventer:
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
)