我创建了两个表,其中一个具有原始类型:
CREATE TABLE CARDS_BAD ( suit CHAR(1), rank VARCHAR(2) ); 另一个具有用户定义的类型
CREATE TYPE suits AS ENUM ('♣', '♠', '♥', '♦');
CREATE TYPE ranks AS ENUM ('2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K', '10', 'A');
CREATE TABLE CARDS_GOOD ( suit suits, rank ranks ); 如您所见,这两个表将包含扑克牌组,使用简单INSERT查询即可添加纸牌。当我尝试从两个表中删除等级7或更低的所有卡时:
DELETE FROM cards_bad t where t.rank < '7'; DELETE FROM cards_good t where t.rank < '7'; 该查询工作正常,cards_good但也删除了排名10为的卡片cards_bad,但我希望结果是相同的。有人可以向我解释为什么不同吗?也可以说我想将INSERT一张JOKER牌放进牌组(等级为Jo但没有套牌),为什么这不起作用?
问题来源于stack overflow
这些表之间有一个明显的区别:cards_good依靠枚举类型存储ranks,而cards_bads使用varchar()。
在进行字符串比较时'10' < '7',因为'10'始于'1',所以小于'7'。
另一方面,虽然enum在您的用例中比较s似乎可行,但我不能保证可以始终如一地工作。
一个可能更安全的选择是创建一个查找表,为每个表显式分配一个(数字)权重rank。
在百搭牌上,它具有等级,但不适合:就suit您而言,表中的必填列不是必填列,因此,没有什么可以阻止您插入suit设置为的卡null。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。