首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDB如何处理ENUM上的连接?

问MariaDB如何处理ENUM上的连接?
EN

Database Administration用户
提问于 2018-05-22 19:25:31
回答 1查看 834关注 0票数 1

我只是想知道,因为MySQL ENUMs本质上是和桌子绑在一起的,如果两张桌子的ENUM是一样的,他们该如何处理JOINs呢?它们是基于ENUM值还是基于字符串键(输入)加入的?

有关后续工作,请参阅MariaDB如何处理外键约束中使用的ENUM类型?。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-05-22 19:25:31

两个表不能有相同的ENUMs。MySQL假定所有ENUM键都是全局唯一的。

代码语言:javascript
复制
CREATE TABLE foo ( a ENUM ('A', 'B', 'C'), x int );
CREATE TABLE bar ( a ENUM ('A', 'C', 'D'), y int );
INSERT INTO foo ( a, x ) VALUES ('A',1), ('B',2), ('C',3);
INSERT INTO bar ( a, y ) VALUES ('A',4), ('C',5), ('D',6);

SELECT * FROM foo JOIN bar USING(a);
+------+------+------+
| a    | x    | y    |
+------+------+------+
| A    |    1 |    4 |
| C    |    3 |    5 |
+------+------+------+

因此,在这个上下文中,ENUM的值是键的字符串值。PostgreSQL将返回相同的结果,但是由于它具有实际的ENUM类型,所以连接中的比较是interger,它不必将ENUM解析为字符串,

代码语言:javascript
复制
CREATE TYPE myType AS ENUM ('A', 'B', 'C', 'D');
CREATE TABLE foo ( a myType, x int );
CREATE TABLE bar ( a myType, y int );
INSERT INTO foo ( a, x ) VALUES ('A',1), ('B',2), ('C',3);
INSERT INTO bar ( a, y ) VALUES ('A',4), ('C',5), ('D',6);

SELECT * FROM foo JOIN bar USING (a);
 a | x | y 
---+---+---
 A | 1 | 4
 C | 3 | 5

如果foo和bar是MySQL在它的enum“类型”中要求的不同的D9类型,那么您就会遇到同样的问题,但是PostgreSQL根本不允许连接,因为它们是不同的类型。PostgreSQL也是不允许一种枚举类型引用不同的离散枚举类型类型,无需手动提供从一个枚举转到另一个枚举的方法。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/207533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档