Создание типа переменной ENUM в MySQL - PullRequest
25 голосов
/ 23 сентября 2009

Я использую тип данных ENUM в MySQL и хотел бы использовать его повторно, но не вводить значения заново. Есть ли эквивалент в C, C ++ способ определения типов в MySQL?

Я бы хотел сделать следующее:

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

Возможно ли это?

Спасибо

1 Ответ

43 голосов
/ 23 сентября 2009

Нет. MySQL не поддерживает CREATE DOMAIN или CREATE TYPE, как, например, PostgreSQL .

Вам, вероятно, придется снова ввести все имена. Вы можете смягчить работу, необходимую для этого, с помощью сценариев копирования и вставки или сценариев SQL.

Вы также можете использовать таблицы INFORMATION_SCHEMA, чтобы получить текст определения ENUM, а затем интерполировать его в новый оператор CREATE TABLE.

Вы также можете творчески использовать CREATE TABLE AS для копирования определения типа. Вот демонстрация:

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

Выходы:

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

Наконец, я предлагаю, чтобы в вашем ENUM было много значений (что, я полагаю, верно, поскольку вы ищете решение, чтобы не вводить их), вам, вероятно, следует использовать справочную таблицу вместо ENUM. тип данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...