【问题标题】:MySQL enum field insert by indexMySQL枚举字段按索引插入
【发布时间】:2011-09-05 16:23:44
【问题描述】:

有一个简单的mysql表'mytable'有一个名为'fruit'的列,它是一个包含'apple'、'orange'和'mango'的枚举字段。

我们可以通过 SELECT fruit+0 FROM mytable 访问枚举的索引值 但是我们如何通过索引而不是 INSERT INTO mytable fruit VALUE 'apple' WHERE 来插入枚举字段...

我尝试了 INSERT INTO mytable fruit+0 VALUE '1' WHERE ... 但它不起作用,并且在此处或从网上找不到任何相关主题。

谢谢。

【问题讨论】:

    标签: mysql enums insert


    【解决方案1】:

    一个简单的INSERT INTO mytable(fruit) VALUES(1); 应该可以工作。

    您不需要像 select 中那样进行任何fruit+0 转换。

    【讨论】:

    • 这个答案是正确的。您可以简单地使用数字索引作为值;但是,请注意,您需要自己跟踪索引,以防重新排序枚举值。它们的索引从 0 开始,因此您的第一个项目位于索引 0。我会投票赞成这个答案,但是请注意,这不是实践中最好的事情。
    • 谢谢!现在可以了。 @wilmoore,实际上,索引将在访问开始时生成,除非mysql会自动重新排序,否则枚举值不会重新排序?
    • 警告:ENUMs are 1-based,至少在 MySQL 中:"列规范中列出的元素被分配索引号,从 1 开始。索引空字符串错误值为0。" dev.mysql.com/doc/refman/5.7/en/enum.html
    【解决方案2】:

    枚举专门设计用于消除了解索引值的需要。通过使用索引值,您专门违背了枚举存在的原因。

    如果您不想使用枚举值进行插入,那么我建议将水果名称拆分到一个单独的表中,并让您的 mytable.fruit 成为指向这个新水果表的外键。然后您将插入一个 ID 值而不是“apple”。

    【讨论】:

    • 感谢您的回答和解释。我完全同意你的看法。但我想知道是否有办法做到这一点?
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    相关资源
    最近更新 更多