Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ENUM-Variablentyp in MySQL erstellen

Nein. MySQL unterstützt CREATE DOMAIN nicht oder CREATE TYPE wie es zum Beispiel PostgreSQL tut .

Sie müssen wahrscheinlich alle Namen erneut eingeben. Sie können den hierfür erforderlichen Arbeitsaufwand verringern, indem Sie Kopieren und Einfügen oder SQL-Skripts verwenden.

Sie können auch das INFORMATION_SCHEMA verwenden Tabellen, um den Text der ENUM-Definition zu erhalten, und interpolieren Sie diesen dann in eine neue CREATE TABLE Aussage.

Sie können auch CREATE TABLE AS verwenden auf kreative Weise, 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;

Ausgaben:

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

Abschließend schlage ich vor, dass Sie, wenn Ihr ENUM viele Werte enthält (was meiner Meinung nach zutrifft, da Sie nach einer Lösung suchen, um das Eingeben zu vermeiden), wahrscheinlich eine Nachschlagetabelle anstelle des ENUM-Datentyps verwenden sollten.

Re-Kommentar von @bliako:

Sie können tun, was Sie auf diese Weise beschreiben:

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

Ich habe das auf MySQL 5.7.27 ausprobiert und es hat funktioniert.

Es ist interessant festzustellen, dass Sie nicht alle drei Spalten in der CREATE TABLE-Zeile deklarieren müssen. Die dritte Spalte f wird automatisch hinzugefügt.

Interessant ist auch, dass ich im SELECT Spaltenaliase angeben musste -Anweisung, um sicherzustellen, dass die Spaltennamen mit denen übereinstimmen, die in CREATE TABLE deklariert wurden . Andernfalls, wenn die Spaltennamen nicht übereinstimmen, erhalten Sie zusätzliche Spalten, und ihre Datentypen entsprechen nicht Ihren Erwartungen:

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
)