[英]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 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
)
下面給出了 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.