无法使用多个表创建 MySQL 触发器
Can't create MySQL Trigger with several tables
我有一个包含 3 tables:
的数据库
delivery
company
details
company
table 有一列从 1 到 10 的评级,如果评级超过 5,我们可以理解这家公司是可靠的和详细的,如果价格超过1000是昂贵的细节。
Table delivery
正在为 company
和 details
连接 table 现在我正在尝试创建一个触发器来阻止 Insert 当有人试图在一家不可靠的公司添加 table delivery
昂贵的细节时,但我不明白如何使用来自不同 table 的数据创建触发器.
我正在使用 MySQL
DELIMITER //
CREATE TRIGGER before_insert_1
BEFORE INSERT
ON delivery
FOR EACH ROW
IF company.rating < 5 AND detail.Det_Price > 1000 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Unreliable company';
END IF //
DELIMITER ;
您应该复习 https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html 并特别注意对 NEW 的讨论。值。
触发器的简单版本可能像
DELIMITER //
CREATE TRIGGER before_insert_1
BEFORE INSERT
ON delivery
FOR EACH ROW
begin
declare vrating int;
declare vprice int;
select company.rating into vrating from company where company.id = new.company_id;
select detail.det_price into vprice from detail where detail.? = new.?;
IF vrating < 5 AND vPrice > 1000 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Unreliable company';
END IF ;
end //
DELIMITER ;
但由于您没有发布 table 定义,我无法确切地告诉您应该如何选择。
我有一个包含 3 tables:
的数据库delivery
company
details
company
table 有一列从 1 到 10 的评级,如果评级超过 5,我们可以理解这家公司是可靠的和详细的,如果价格超过1000是昂贵的细节。
Table delivery
正在为 company
和 details
连接 table 现在我正在尝试创建一个触发器来阻止 Insert 当有人试图在一家不可靠的公司添加 table delivery
昂贵的细节时,但我不明白如何使用来自不同 table 的数据创建触发器.
我正在使用 MySQL
DELIMITER //
CREATE TRIGGER before_insert_1
BEFORE INSERT
ON delivery
FOR EACH ROW
IF company.rating < 5 AND detail.Det_Price > 1000 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Unreliable company';
END IF //
DELIMITER ;
您应该复习 https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html 并特别注意对 NEW 的讨论。值。
触发器的简单版本可能像
DELIMITER //
CREATE TRIGGER before_insert_1
BEFORE INSERT
ON delivery
FOR EACH ROW
begin
declare vrating int;
declare vprice int;
select company.rating into vrating from company where company.id = new.company_id;
select detail.det_price into vprice from detail where detail.? = new.?;
IF vrating < 5 AND vPrice > 1000 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Unreliable company';
END IF ;
end //
DELIMITER ;
但由于您没有发布 table 定义,我无法确切地告诉您应该如何选择。