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 tableQuntyAvailable
列
例如,当客户从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触发器之前,并以//