gpt4 book ai didi

mysql - 检查表中的列值加起来是否等于 100(百分比)

转载 作者:行者123 更新时间:2023-11-29 15:31:43 25 4
gpt4 key购买 nike

我正在 MYSQL 中完成一项作业。表中有一列跟踪作者的佣金百分比。元组中的佣金值加起来应始终为 100

R is the relation R ={authorid,isbn,commission} (authorid,isbn) --> primary key

因此,元组可以包含一个 ISBN 的多个作者,每个作者具有不同的佣金值。我们应该确保 isbn 的佣金加起来应始终为 100,不少于或不少于 100。我该如何实现?我被告知要使用触发器来实现相同的目的,但是,我没有想法了。

我只能想到像下面这样的触发器(高级逻辑)

SELECT isbn,sum(commission) FROM R GROUP BY isbn 

我获取总佣金并检查该值是否为 100,然后据此拒绝插入/更新

但这意味着我会拒绝用户想要依次插入 3 个元组的情况,其中佣金分别为 20,30,50。这是一个有效的案例。插入内容如下所示

INSERT INTO R(authorid,isbn,commission) VALUES (1,2,20)
INSERT INTO R(authorid,isbn,commission) VALUES (2,2,30)
INSERT INTO R(authorid,isbn,commission) VALUES (3,2,50)

您能指导我吗?如果我不清楚,请告诉我。我觉得在数据库端进行这种验证是不寻常的,但是,这是一项任务,所以应该想出一些解决方案

我在网上查看过类似的问题是否已经解决。查看了 MYSQL 文档,但没有运气。

最佳答案

您可以用于插入

此触发器

DELIMITER $$
CREATE TRIGGER commisiontest
BEFORE INSERT ON R
FOR EACH ROW
BEGIN
SELECT sum(commission) into @commision FROM R WHERE isbn = NEw.isbn GROUP BY isbn;
IF (NEW.commission + @commision) > 100
THEN
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Warning: commission reaches 100 or above';
END IF;

END$$
DELIMITER ;

这样就可以了

INSERT INTO R(authorid,isbn,commission) VALUES (3,2,50) 
Error Code: 1643. Warning: commission reaches 100 or above 0.000 sec

类似的事情也适用于更新

因此这将防止佣金高于 100%

关于mysql - 检查表中的列值加起来是否等于 100(百分比),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58671714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com