通过MySQL中的发票表更新库存表

时间:2013-09-14 13:25:52

标签: java mysql sql

我有三个表customerstockinvoice

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'”);

1 个答案:

答案 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 ;