Mysql 触发where子句依赖于3个表?
我想扣的扳机有问题。这是一个大学项目,所以它需要一个触发器完成 我有3张涉及触发器的表格。客户订单、产品客户订单和产品分公司库存(其内容和用途如下所示)。我还包括了我正在使用的代码,虽然我尝试了很多不同的版本,但都没有成功,这是最新的一个 我可以让触发器根据customer\u order insert上的branch\u id来减少product\u branch\u stock表上的库存,但它不能说明product\u id在另一个表上。所以,我也很想知道我怎么能把另一张桌子放到触发器里 这个设计可能不是最好的,但请记住,我现在才开始使用sql大约6周,我还有很多东西要学!所以,您能给予的任何帮助都将不胜感激!我的项目周五到期 编辑:我在下面添加了带有相关列和示例行的表 我正在尝试创建的此触发器(可能是嵌套触发器) 在客户订单表中插入行时,应执行以下操作Mysql 触发where子句依赖于3个表?,mysql,sql,triggers,nested,Mysql,Sql,Triggers,Nested,我想扣的扳机有问题。这是一个大学项目,所以它需要一个触发器完成 我有3张涉及触发器的表格。客户订单、产品客户订单和产品分公司库存(其内容和用途如下所示)。我还包括了我正在使用的代码,虽然我尝试了很多不同的版本,但都没有成功,这是最新的一个 我可以让触发器根据customer\u order insert上的branch\u id来减少product\u branch\u stock表上的库存,但它不能说明product\u id在另一个表上。所以,我也很想知道我怎么能把另一张桌子放到触发器里 这
- 在产品\客户\订单中插入行(任何值)
- 通过删除“产品\分支\库存”列来更新该列 客户订单表上的数量
- 仅在新分支id(来自insert)的行上执行此操作
在客户订单上)等于
产品\分支机构\库存和新产品\ id(来自
产品(客户订单)上触发的插入等于
产品分支库存上的产品id - 客户订单(客户订单id、订单时间、订单日期、用户名、, 分行(id)
- 产品\客户\订单(客户\订单\ id、产品\ id、, 数量,)(这是产品和 客户(订单表,因为存在多对多关系)
- product\u branch\u stock(product\u id,branch\u id,stock)这是我创建的一个表,旨在能够监控每个分支中每个产品的库存)
您可以从触发器内的另一个表中进行选择,并将结果提取到游标或其他变量中。请提供:为所有3个表创建表(可能会跳过与流程无关的列以及除这些表之间的FKs之外的所有非唯一索引);这些表的一些示例数据(足够3-5行)作为INSERT INTO;将数据插入
客户订单
(初始化流程)和所需最终表格数据(格式化表格类型文本)的查询。尽量使所有数值都是唯一的(即,只有在可能的情况下,每个数值可以通过一种方式从初始值中获得)。@Akina首先非常感谢您关注我的问题!我已经按照您的要求使用一些虚拟数据创建表命令。应该可以正常工作,我在mysql的“测试”模式中对其进行了测试。所有表中的虚拟数据都是对齐的,因为它们都有匹配的外键等。我省略了大多数外键的约束(在我的项目中,这些表也与其他不相关的表相链接,因此,当我复制和粘贴它时,自然不允许我在没有父表的情况下更新子表。而且我知道我的代码与触发器代码相比看起来相当混乱,它看起来与注释/问题文本的测试类型相同。有没有办法更改它以使其保持一致看起来像是触发代码?比如,它的颜色和一切?对不起,完全初学者与堆栈溢出太。
create schema test;
use test;
CREATE TABLE customer_order (
customer_order_id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL, # foreign key
branch_id INT NOT NULL, # foreign key
PRIMARY KEY (customer_order_id)
);
INSERT INTO customer_order (customer_order_id, username, branch_id)
VALUES ('1','Paddytheboi101', 2 );
INSERT INTO customer_order (customer_order_id, username, branch_id)
VALUES ('2','LuCkYmIkE', 1 );
INSERT INTO customer_order (customer_order_id, username, branch_id)
VALUES ('3','DutchDefence', 1 );
#intermediary table due to many to many relationship - order can have #multiple products, product can be on multiple orders
CREATE TABLE product_customer_order (
customer_order_id INT NOT NULL AUTO_INCREMENT, # primary and foreign key
product_id INT NOT NULL, # primary and foreign key
quantity INT NOT NULL,
PRIMARY KEY (customer_order_id, product_id),
FOREIGN KEY (customer_order_id) REFERENCES customer_order (customer_order_id)
);
INSERT INTO product_customer_order (customer_order_id, product_id, quantity)
VALUES ('1', '8', '1');
INSERT INTO product_customer_order (customer_order_id, product_id, quantity)
VALUES ('2', '21', '4');
INSERT INTO product_customer_order (customer_order_id, product_id, quantity)
VALUES ('3', '32', '3');
CREATE TABLE product_branch_stock (
product_id INT NOT NULL, # foreign key
branch_id INT NOT NULL, # foreign key
stock INT NOT NULL,
PRIMARY KEY (branch_id, product_id)
);
INSERT INTO product_branch_stock (product_id, branch_id, stock)
VALUES (8,2,10);
INSERT INTO product_branch_stock (product_id, branch_id, stock)
VALUES (21,1,10);
INSERT INTO product_branch_stock (product_id, branch_id, stock)
VALUES (32,1,10);
DROP TRIGGER IF EXISTS X;
CALL DELIMITER //
CREATE TRIGGER X
AFTER INSERT ON customer_order
FOR EACH ROW
BEGIN
INSERT INTO product_customer_order (product_id, quantity)
VALUES (7, 2);
UPDATE product_branch_stock AS pbs
SET pbs.stock = pbs.stock - new.product_customer_order.quantity
WHERE new.branch_id = pbs.branch_id AND
product_customer_order.product_id = pbs.product_id;
END//