簡體   English   中英

在 MySQL 中創建 ENUM 變量類型

[英]Creating ENUM variable type in MySQL

我在 MySQL 中使用 ENUM 數據類型並想重用它,但不重新輸入值。 是否有等效於 C、C++ 在 MySQL 中定義類型的方式?

我想做以下事情:

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

這可能嗎?

謝謝

號MySQL不支持CREATE DOMAINCREATE 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
)

下面給出了 mysql db 的示例。

CREATE TABLE `data` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
  `gender` enum('Male','Female') DEFAULT NULL,
PRIMARY KEY (`Id`)
  ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM