sql >> Databáze >  >> RDS >> Mysql

Vytvoření typu proměnné ENUM v MySQL

Ne. MySQL nepodporuje CREATE DOMAIN nebo CREATE TYPE jako například PostgreSQL dělá .

Pravděpodobně budete muset všechna jména zadat znovu. Práci, kterou to vyžaduje, můžete zmírnit pomocí kopírování a vkládání nebo skriptů SQL.

Můžete také použít INFORMATION_SCHEMA tabulky, abyste získali text definice ENUM, a poté jej interpolovali do nové CREATE TABLE prohlášení.

Můžete také použít CREATE TABLE AS kreativními způsoby kopírování definice typu. Zde je ukázka:

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

Výstupy:

CREATE TABLE `bar` (
  `b` enum('abc','xyz') default NULL
) 

Nakonec navrhuji, že pokud váš ENUM obsahuje mnoho hodnot (což je podle mě pravda, protože hledáte řešení, jak se vyhnout jejich psaní), měli byste pravděpodobně používat vyhledávací tabulku místo datového typu ENUM.

Znovu komentář od @bliako:

To, co popisujete, můžete udělat takto:

CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;

Zkoušel jsem to na MySQL 5.7.27 a fungovalo to.

Je zajímavé poznamenat, že v řádku CREATE TABLE nemusíte deklarovat všechny tři sloupce. Třetí sloupec f budou přidány automaticky.

Je také zajímavé, že jsem musel v SELECT zadat aliasy sloupců abyste se ujistili, že názvy sloupců odpovídají názvům uvedeným v CREATE TABLE . V opačném případě, pokud se názvy sloupců neshodují, skončíte se sloupci navíc a jejich datové typy nejsou takové, jaké očekáváte:

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
)


  1. DATE_ADD() Příklady – MySQL

  2. Objekt 'DF__*' je závislý na sloupci '*' - Změna int na double

  3. Aktualizujte jednu tabulku MySQL hodnotami z jiné

  4. Jak získat počet řádků ve sqlite pomocí Androidu?