我有三个表customer
,stock
,invoice
。
customer table PK is CNo(Customer No)
stock table PK is PNo(Product NO)
发票表获取两个PK(来自customer
表的CNo和来自stock
表的PNo)作为其关联密钥。
我想要做的是,通过QuntyAvailable
表更新stock table invoice
列。
实施例。当客户从PNo
2获得2个数量的Dettol时,它会自动将上述产品自己行的库存表QuntyAvailabl
e列更新为18(QuntyAvailable-Qty
)。
我尝试了很多次查询,但我只得到了错误。喜欢PK无法更新.. bla bla bla ......
请帮帮我谢谢。
customer table
CNo(PK) | Name | Address
1 | Jhon | 23, Hill St, NY.
2 | Sam | 24, Bejin , Chaina.
3 | Nic | 25, London ,England.
stock table
PNo(PK) | Description | Each Price | QntyAvailable
1 | Dettol | $2 | 10
2 | Astra | $5 | 20
invoice table
CNo(PK) | PNo(PK) | Qty | value
1 | 2 | 2 | $10
2 | 1 | 3 | $6
更新完成后我想要这样的股票表......
stock table
PNo(PK) | Description | Each Price | QntyAvailable
1 | Dettol | $2 | 7
2 | Astra | $5 | 18
请帮帮我..我使用的是mysql服务器和netbeans IDE
我的查询-------------
s.executeUpdate(“INSERT INTO invoice(CNo,PNo,Qty,Value)VALUES('1','2','10','150')”); s.executeUpdate(“UPDATE stock set QuntyAvailable = QuntyAvailable-10 WHERE Pno ='2'”);
答案 0 :(得分:0)
如果你想在发票中插入时更新股票表,你可以在插入后用插入数据进行更新(就像你试过的那样,唯一看起来错误的是='2'
看起来应该只是=2
)或者在触发器中执行此操作,让新插入的值提供更新:
CREATE TRIGGER updateStock AFTER INSERT ON invoice
FOR EACH ROW BEGIN
UPDATE stock set QntyAvailable=QntyAvailable- new.Qty WHERE Pno =new.Pno;
END;
//
您可以查看this fiddle以查看其是否有效。
P.S。
你真的应该有一个InvoiceID。您构建它的方式,您不允许客户两次购买相同的产品。
P.S。 2 - 创建触发器的错误与未设置DELIMITER有关。 如果你没有设置它,语句将在第一个结束;您需要在触发器之前设置它并使用它结束触发器定义。之后,您可以将分隔符设置回;。
DELIMITER //
CREATE TRIGGER updateStock AFTER INSERT ON invoice
FOR EACH ROW BEGIN
UPDATE stock set QntyAvailable=QntyAvailable- new.Qty WHERE Pno =new.Pno;
END;
//
DELIMITER ;