2009-09-22 19 views
20

Używam typu danych ENUM w MySQL i chcę go ponownie użyć, ale nie ponownie wpisz wartości. Czy istnieje odpowiednik sposobu definiowania typów w języku C i C++ w MySQL?Tworzenie typu zmiennej ENUM w MySQL

Chciałbym wykonaj następujące czynności:

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

Czy to możliwe?

Dzięki

Odpowiedz

32

nr MySQL nie obsługuje CREATE DOMAIN lub CREATE TYPE jak, na przykład, PostgreSQL does.

Prawdopodobnie będziesz musiał wprowadzić wszystkie nazwiska ponownie. Możesz zmniejszyć nakład pracy, aby to zrobić, używając wklejania lub skryptów SQL.

Można również użyć tabel INFORMATION_SCHEMA, aby uzyskać tekst definicji ENUM, a następnie dokonać interpolacji w nowym oświadczeniu CREATE TABLE.

Można również użyć CREATE TABLE AS w kreatywny sposób, aby skopiować definicję typu. Oto demonstracji:

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

Wyjścia:

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

Wreszcie uważam, że jeśli Twój ENUM ma wiele wartości w nim (który Zgaduję jest prawdą, ponieważ szukasz rozwiązania unikaj ich wpisywania), prawdopodobnie powinieneś używać tabeli odnośników zamiast typu danych ENUM.