3

为了说明我的问题,我将使用作者和书籍的类比。

我有 2 个表“作者”和“书籍”。作者是唯一的,书籍使用外键约束与特定作者绑定。

我想知道是否有可能在“books”表中有一个名为“booknum”的列,该列在单个作者的子集中自动递增。因此,如果表格有 100 行并且我插入作者的第四本书,它会将 4 放入“booknum”列。

数据库映像

例如,如果 books 表有 6 行:

id | authors_id | booknum | name

1  | 1          | 1       | "hello"

2  | 1          | 2       | "goodbye"

3  | 2          | 1       | "booktitle"

4  | 3          | 1       | "more title"

5  | 1          | 3       | "nametwo"

6  | 2          | 2       | "nameone"

这在 mysql 中是否可能,还是我需要去检查最后创建的书并在添加书时手动增加?

4

2 回答 2

7

您可以使用触发器:

CREATE TRIGGER biBooks 
  BEFORE INSERT ON books 
  FOR EACH ROW SET NEW.booknum = (
    SELECT COALESCE(MAX(booknum), 0) + 1 
      FROM books 
      WHERE authors_id = NEW.authors_id
  )
;
于 2012-06-04T13:07:05.430 回答
0

单表语法:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

多表语法:

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]

对于单表语法,UPDATE语句用新值更新命名表中现有行的列。SET子句指示要修改的列以及应给定的值。每个值都可以作为表达式给出,也可以使用关键字DEFAULT将列显式设置为其默认值。WHERE子句(如果给定)指定标识要更新哪些行的条件。如果没有 WHERE子句,所有行都会更新。如果指定了ORDER BY子句,则按指定的顺序更新行。LIMIT子句对可以更新的行数进行了限制。

对于多表语法,UPDATE更新 table_references 中命名的每个表中满足条件的行。每个匹配的行都会更新一次,即使它多次匹配条件。对于多表语法,不能使用ORDER BYLIMIT 。

于 2013-12-15T04:49:29.757 回答