2009-09-22 11 views
20

Sto utilizzando un tipo di dati ENUM in MySQL e vorrei riutilizzarlo, ma non ridigitare i valori. Esiste un equivalente al modo C, C++ di definire i tipi in MySQL?Creazione del tipo di variabile ENUM in MySQL

vorrei fare quanto segue:

DEFINE ETYPE ENUM('a','b','c','d'); 
CREATE TABLE Table_1 (item1 ETYPE, item2 ETYPE); 

è possibile?

Grazie

risposta

32

No. MySQL non supporta CREATE DOMAIN o CREATE TYPE come, per esempio, PostgreSQL does.

Probabilmente dovrai inserire di nuovo tutti i nomi. È possibile attenuare il lavoro necessario per eseguire questa operazione utilizzando la copia & incolla o gli script SQL.

È inoltre possibile utilizzare le tabelle INFORMATION_SCHEMA per ottenere il testo della definizione ENUM e quindi interpolarlo in una nuova istruzione CREATE TABLE.

È anche possibile utilizzare 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 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

Infine, suggerisco che se l'ENUM ha molti valori in esso (che sto cercando di indovinare è vero perché siete alla ricerca di una soluzione per evitare di scriverli), probabilmente dovresti usare una tabella di ricerca invece del tipo di dati ENUM.