No. MySQL non supporta CREATE DOMAIN
o CREATE TYPE
come, ad esempio, PostgreSQL fa
.
Probabilmente dovrai inserire di nuovo tutti i nomi. Puoi ridurre il lavoro necessario per farlo utilizzando copia e incolla o script SQL.
Puoi anche usare INFORMATION_SCHEMA
tabelle per ottenere il testo della definizione ENUM, quindi interpolarlo in un nuovo CREATE TABLE
dichiarazione.
Puoi anche usare CREATE TABLE AS
in modi creativi per copiare una definizione di tipo. Ecco una dimostrazione:
CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
Uscite:
CREATE TABLE `bar` (
`b` enum('abc','xyz') default NULL
)
Infine, suggerisco che se il tuo ENUM contiene molti valori (che suppongo sia vero poiché stai cercando una soluzione per evitare di digitarli), probabilmente dovresti utilizzare una tabella di ricerca anziché il tipo di dati ENUM.
Commento di @bliako:
Puoi fare ciò che descrivi in questo modo:
CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
L'ho provato su MySQL 5.7.27 e ha funzionato.
È interessante notare che non è necessario dichiarare tutte e tre le colonne nella riga CREATE TABLE. La terza colonna f
verrà aggiunto automaticamente.
È anche interessante che ho dovuto fornire alias di colonna in SELECT
per assicurarsi che i nomi delle colonne corrispondano a quelli dichiarati in CREATE TABLE
. Altrimenti, se i nomi delle colonne non corrispondono, ti ritroverai con colonne extra e i loro tipi di dati non sono quelli che ti aspetti:
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
)