Mysql
 sql >> база данни >  >> RDS >> Mysql

Създаване на тип променлива ENUM в MySQL

Не. 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
) 

И накрая, предлагам, че ако вашият ENUM има много стойности в него (което предполагам е вярно, тъй като търсите решение, за да избегнете въвеждането им), вероятно трябва да използвате таблица за търсене вместо типа данни ENUM.

Повторен коментар от @bliako:

Можете да направите това, което описвате по следния начин:

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

Опитах това на MySQL 5.7.27 и се получи.

Интересно е да се отбележи, че не е нужно да декларирате и трите колони в реда CREATE TABLE. Третата колона f ще бъдат добавени автоматично.

Интересно е също, че трябваше да дам псевдоними на колони в SELECT изявление, за да се уверите, че имената на колоните съвпадат с декларираните в CREATE TABLE . В противен случай, ако имената на колоните не съвпадат, ще получите допълнителни колони и техните типове данни не са това, което очаквате:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Таблици с обобщени данни

  2. Не мога да намеря mysql.sock

  3. Еквивалентна клауза за връщане на Mysql

  4. MySQL:ИЗБЕРЕТЕ от друг сървър

  5. Spring Boot JPA:Подаване на множество стойности за един и същ параметър (JPQL)