2009-09-22 10 views
20

Ich verwende einen ENUM-Datentyp in MySQL und möchte es wiederverwenden, aber nicht in den Werten neu eingeben. Gibt es ein Äquivalent zur Art C, C++ in MySQL zu definieren?Erstellen ENUM Variablentyp in MySQL

Ich möchte folgendes tun:

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

Ist das möglich?

Dank

Antwort

32

Nr MySQL nicht CREATE DOMAIN oder CREATE TYPE wie zum Beispiel PostgreSQL does unterstützt.

Sie müssen wahrscheinlich alle Namen erneut eingeben. Sie können die dafür erforderliche Arbeit verringern, indem Sie die Kopie & einfügen oder SQL-Skripts verwenden.

Sie können auch die Tabellen INFORMATION_SCHEMA verwenden, um den Text der ENUM-Definition abzurufen, und diesen dann in eine neue CREATE TABLE-Anweisung interpolieren.

Sie können auch CREATE TABLE AS auf kreative Weise verwenden, um eine Typdefinition zu kopieren. Hier ist eine Demonstration:

CREATE TABLE foo (f ENUM('abc', 'xyz')); 
CREATE TABLE bar AS SELECT f AS b FROM foo; 
SHOW CREATE TABLE bar; 

Ausgänge:

CREATE TABLE `bar` (
    `b` enum('abc','xyz') default NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

Schließlich schlage ich vor, dass, wenn Ihr ENUM hat viele Werte in es (was ich vermute, ich ist wahr, da Sie suchen nach einer Lösung vermeiden Sie sie zu tippen), Sie sollten wahrscheinlich eine Nachschlagetabelle anstelle des ENUM-Datentyps verwenden.