mysql - 在 MySQL 中创建 ENUM 变量类型

标签 mysql variables enums

我在 MySQL 中使用 ENUM 数据类型,并希望重用它,但不重新键入值。在 MySQL 中是否有与 C、C++ 等价的定义类型的方式?

我想做以下事情:

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

这可能吗?

谢谢

最佳答案

没有。 MySQL 不支持 CREATE DOMAINCREATE TYPE,例如 PostgreSQL does .

您可能需要再次输入所有名称。您可以通过使用复制和粘贴或 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 - 在 MySQL 中创建 ENUM 变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1462497/

相关文章:

Netbeans 中的 Java 数据库连接

c# - 几个 C# 命名约定问题

python - 如何设置 Pydantic 字段上的所有枚举值?

c++ - 声明带有和不带有 'typedef' 的枚举有什么区别?

enums - 如何使用 Dart/Flutter 将枚举属性序列化/反序列化到 Firestore?

php - PHP 搜索建议中的排序结果

MySQL,什么是SQL接口(interface)?

sql - MySQL Workbench 中的列标志是什么意思?

javascript - 简单的 JSON 问题...如何插入变量?

Java:你能用一个变量来沮丧吗?