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

Java 通过MySQL中的发票表更新库存表,java,mysql,sql,Java,Mysql,Sql,我有三个表,分别是客户,库存,发票 customer table PK is CNo(Customer No) stock table PK is PNo(Product NO) invoice表获取PKs(来自customer表的CNo和来自stock表的PNo)作为其关联键 我想做的是,通过invoice表更新stock tableQuntyAvailable列 例如,当客户从PNo2(即Dettol)获得2个数量时,它会自动将上述产品自身行的库存表QuntyAvailablee列更新为1

我有三个表,分别是
客户
库存
发票

customer table PK is CNo(Customer No)
stock table PK is PNo(Product NO)
invoice表获取PKs(来自
customer
表的CNo和来自
stock
表的PNo)作为其关联键

我想做的是,通过
invoice
表更新stock table
QuntyAvailable

例如,当客户从
PNo
2(即Dettol)获得2个数量时,它会自动将上述产品自身行的库存表
QuntyAvailable
e列更新为18(
QuntyAvailable Qty

我多次尝试各种查询,但只得到了错误。like PK无法更新。。 呜呜呜呜

请帮我做这个谢谢

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、 执行更新(“插入发票(CNo、PNo、数量、价值)值('1'、'2'、'10'、'150');s、 executeUpdate(“更新库存集QuantyAvailable=QuantyAvailable-10,其中Pno='2'”)

如果您想在发票中插入时更新库存表,您可以在插入后使用插入数据进行更新(就像您尝试的那样,唯一看起来错误的是
='2'
,看起来应该是
=2
),也可以在触发器中进行更新,将新插入的值提供给更新:

在发票上插入后创建触发器updateStock
每行开始
更新库存集QntyAvailable=QntyAvailable-新数量,其中Pno=new.Pno;
结束;
//
你可以检查它是否正常工作

附言

你真的应该有一个InvoiceID。按照您构建它的方式,您不允许客户购买同一产品两次

p.S.2-创建触发器的错误与未设置分隔符有关。 如果不设置它,语句将以第一个结尾;您需要在触发器之前设置它,并用它结束触发器定义。之后,可以将分隔符设置回

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 ;

感谢您发布您的要求。现在请发布您的尝试…您目前使用的查询是什么?s.executeUpdate(“插入发票(CNo、PNo、数量、价值)值('1'、'2'、'10'、'150');s、 executeUpdate(“更新库存集QuantyAvailable=QuantyAvailable-10,其中Pno='2'”);我用这段代码做了很多尝试,但是我无法解决这个错误。代码--为每行在发票上插入后创建触发器UpdateStock开始更新库存集QntyAvailable=(QntyAvailable-new.Qty),其中Pno=new.Pno错误为“com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第1行“”附近要使用的正确语法“帮助只是另一个提示。您真的应该在发票表中添加invoiceID。如果你最终发现这有助于解决你的问题,别忘了接受答案。我用这段代码做了很多尝试,但我无法解决错误。代码--为每行在发票上插入后创建触发器UpdateStock开始更新库存集QntyAvailable=(QntyAvailable-new.Qty),其中Pno=new.Pno错误为“com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“”附近使用的正确语法。如果您缺少结尾;如果您使用MySQL控制台创建它,则必须将分隔符//放在create触发器之前,并以//