【问题标题】:MySQL InnoDB, Autoincrement a secondary column?MySQL InnoDB,自动增量辅助列?
【发布时间】:2026-02-19 11:10:01
【问题描述】:

我有一张放书的桌子,每本书可以有多个副本,我想给每个副本一个副本编号。

TABLE:
BOOK(book_pk, book_name, book_copy);

基本上每个 book_pk 都是唯一的,但如果有两行具有相同的 book_name,则应将一个 book_copy 设置为 1,另一个设置为 2。

TABLE ROWS:
1, AAA, 1
2, BBB, 1
3, AAA, 2
4, CCC, 1
5, BBB, 2

所以我想在插入具有相同 book_name 的新元组时自动增加主键并跟踪 copyNumber。

【问题讨论】:

  • MyISAM 将完全满足您的需求。不幸的是,Innodb 引擎不支持这个。

标签: mysql sql database innodb


【解决方案1】:

试试:

INSERT INTO Book (book_name, book_copy) 
VALUES ( 
   'AAAA',
    (SELECT copy FROM ( SELECT IFNULL(MAX(book_copy),0)+1 as copy FROM Book) AS d)
);

【讨论】:

    【解决方案2】:

    简短的版本是在 MySQL 中不能直接从数据库中完成。也许这最好用两张表来描述。 Book 表和 BookCopy 表。 Book 表可以像您一样具有自动增量。 BookCopy 表也有一个自动增量,但引用回Book 表。这样一来,您就可以拥有一本没有副本的书,而您不能拥有一个 BookCopy 来获取未确定的 Book

    Book Table
    Book(book_pk (auto increment), book_name, ...)
    
    BookCopy Table
    BookCopy(book_copy_pk (auto increment), book_pk (foreign key), ...)
    

    【讨论】:

    • 感谢您的建议。问题是我想保留 BookCopy 自动增量的主键。我已经有你建议的 Book 表和 BookCopy 表,这是我的 OP 中的表。