【问题标题】:Scoped AUTO_INCREMENT in MySQL?MySQL中的范围AUTO_INCREMENT?
【发布时间】:2011-06-24 01:42:47
【问题描述】:

我在 Rails 应用程序中使用 MySQL。我有一个 users 表(标准的东西,如 id、name 等)和一个 books 表(同样带有 id、user_id 和 title 等)。

我想要一个列(我们称之为 user_book_id),它应该像 id 一样自动递增,但以 user_id 为范围。就像 id 一样,即使在 books 表中删除了一条记录,user_book_id 也不应该被重用。一个例子:

User

id | Name
------------
1  | Jerry
2  | Newman

Book

id | user_id | user_book_id | Title
-----------------------------------
1  | 1       | 1            | Jerry's First Book
2  | 1       | 2            | Jerry's Second Book
3  | 2       | 1            | Newman's First Book
4  | 1       | 3            | Jerry's Third Book

有没有办法在 MySQL 中做到这一点?我搜索但找不到任何东西。

谢谢, 普拉提克

【问题讨论】:

    标签: mysql ruby-on-rails auto-increment


    【解决方案1】:

    不,不存在这样的事情。要么允许 auto_increment 在整个表中是唯一的,要么您必须自己实现它。

    【讨论】:

    • 这不是常见的情况吗?例如,在 SaaS 解决方案中,一家公司可能有很多案例,您可能希望每个公司都有一个从 1 开始(并不断增加)的 case_id。你如何在数据库级别实现这样的东西?
    【解决方案2】:

    您可以自己实现它,假设您将最后一个 user_book_id 值放在 users 表的新列中,然后在插入书籍时,从 users 中的新列中获取值并增加 +1。

    【讨论】:

    • 当然可以这样做,但我想知道是否有办法在数据库级别做到这一点。如果您看到它是外键范围内的自动增量
    • 是的,当然。但是您需要的功能在 MySQL 中不存在。
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多