为了说明我的问题,我将使用作者和书籍的类比。
我有2个表“作者”和“书籍”。作者是独一无二的,书籍使用外键约束与特定作者联系在一起。
我想知道是否有可能在“books”表中有一个名为“booknum”的列,该列在单个作者的子集中自动递增。因此,如果表格有100行并且我插入了作者的第4本书,那么它会将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中是否可行,或者我是否需要去检查最后创建的书籍并在添加书籍时手动增加?
答案 0 :(得分: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
)
;
答案 1 :(得分: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 子句(如果给定)指定用于标识要更新的行的条件。使用 no WHERE 子句,所有行都会更新。如果指定了 ORDER BY 子句,则按指定的顺序更新行。 LIMIT 子句限制了可以更新的行数。
对于多表语法, UPDATE 更新table_references中指定的满足条件的每个表中的行。每个匹配的行都会更新一次,即使它与条件多次匹配也是如此。对于多表语法,不能使用 ORDER BY 和 LIMIT 。