我有一个像这样的表:
\n\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91ID \xe2\x95\x91 type (enum) \xe2\x95\x91 updated_at \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 1 \xe2\x95\x91 friend_request \xe2\x95\x91 <date_time> \xe2\x95\x91\n\xe2\x95\x91 2 \xe2\x95\x91 new_article \xe2\x95\x91 <date_time> \xe2\x95\x91\n\xe2\x95\x91 3 \xe2\x95\x91 article_read \xe2\x95\x91 <date_time> \xe2\x95\x91\n\xe2\x95\x91 4 \xe2\x95\x91 article_invitation \xe2\x95\x91 <date_time> \xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\nRun Code Online (Sandbox Code Playgroud)\n我想按枚举类型的值对检索到的结果进行排序。
\n具有值friend_request和article_invitation列的记录type应该首先出现,然后是其余的。所有的东西都应该由 订购updated_at DESC。
现在,我知道我可以链接多个order by属性,所以
order by type desc, updated_at desc\nRun Code Online (Sandbox Code Playgroud)\n将为我排序,并按type值排序结果updated_at。但是如何指定列的某些值type呢?这可能吗?
在 Postgres 中,我正在考虑查询pg_type我经常使用的最新枚举列表。我会使用这样的东西:
SELECT pg_type.typname AS enum_type, pg_enum.enumlabel AS enmu_label FROM
pg_type JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid;
Run Code Online (Sandbox Code Playgroud)
或者
SELECT distinct pg_type.typname AS enum_type FROM pg_type JOIN pg_enum ON
pg_enum.enumtypid = pg_type.oid;
Run Code Online (Sandbox Code Playgroud)
这是不好的做法吗?
紧接着这个问题,
如果引用表中的值ENUM比被引用表的值多或少,MySQL 如何工作?它是否仅基于全局ENUM文本密钥(符号)来验证完整性?还是底层的整数值?
我正在设计我的第一个数据库,我发现自己对为分类变量的每个实例存储整数或字符串之间的选择感到沮丧。
我的理解是,如果我有一个包含城市的表,我想将其作为国家/地区表的子级,那么最有效的方法是将国家/地区表的 PK 作为城市表中的 FK。然而,为了便于使用和调试,最好始终将字符串名称与国家/地区 PK 相关联。我考虑过的每个解决方案要么不推荐,要么看起来过于复杂。
我想了解这些方法的优点(或了解新方法),并了解是否必须如此,或者数据库是否只是因为传统而如此。
可能的方法:
使用字符串作为国家/地区的 PK。然后我将在任何子表中为其提供一个人类可读的 FK。显然,性能不如使用整数,但我怀疑这可能是获得我想要的便利的最不糟糕的方法。
使用应用程序逻辑创建一个视图,将每个国家/地区的字符串名称连接到 states 表。
enum数据类型。出于本能,这将是我的首选方法,因为它似乎是自然键和合成键之间的理想平衡:使用整数 ID 并为 ID 提供字符串标签,以便字符串本身不需要重复。这篇非常有用的文章解释了有关MySQL 枚举行为的一些奇怪之处:http : //melp.nl/2009/05/mysql-enums-and-booleans/
没有关于为什么存在这种行为的讨论。此外,在谷歌搜索这个主题时,我发现只有相互矛盾的信息和推测,由“博主”和其他盲人引导。
有人可以描述一下为什么 MySQL 枚举会遭受帖子中概述的行为。这是帖子中介绍的 Enum 奇怪之处的一个示例,但还有更多示例:
mysql> insert into t values('1'),('0');
mysql> select b,b=1,b=0 from t;
+---+-----+-----+
| b | b=1 | b=0 |
+---+-----+-----+
| 1 | 0 | 0 |
| 0 | 1 | 0 |
+---+-----+-----+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud) enum ×5
foreign-key ×2
mysql ×2
postgresql ×2
catalogs ×1
mariadb ×1
natural-key ×1
order-by ×1
primary-key ×1