MySQL InnoDB,Auto_increment一个二级列?

时间:2012-11-18 02:26:19

标签: mysql sql database innodb

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

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。

2 个答案:

答案 0 :(得分:2)

尝试:

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)
);

答案 1 :(得分:1)

简短的版本是在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), ...)