Mysql 使用存储过程将 2 个值与 2 列从 vb6 到数据库进行比较

Posted

技术标签:

【中文标题】Mysql 使用存储过程将 2 个值与 2 列从 vb6 到数据库进行比较【英文标题】:Mysql compare 2 values to 2 columns from vb6 to database using stored procedure 【发布时间】:2013-03-23 08:20:50 【问题描述】:

我的数据库中有一个products 表,其中包含列/字段:

产品ID 产品名称 说明 供应商 购买日期 数量

现在,我想要实现的是:

每次我想在products 表中添加新值时,新输入的“productname”和“supplier”值都会比较products 表中存在的所有值。

场景:

如果products 表中已经存在新的产品名称和供应商值,则新值的数量将添加到现有值的数量中 ELSE 如果它不存在,则将新值添加到products 表中。

这是尝试过的代码,但它不起作用:

Delimiter //
CREATE PROCEDURE `wew`(pid int,pname varchar(50),pdesc varchar(50),psupp varchar(50),pdate date,pquant int)
begin
declare lloyd char default null;
select productname from products where productname=pname LIMIT 1 into lloyd for update;
if(lloyd) then
update products set quantityleft=quantityleft+pquant where productname=pname;
else
insert into products (productid,productname,proddescription,supplier,lastpurchasedate,quantityleft) values(pid,pname,pdesc,psupp,pdate,pquant);
end if;
end;
//

你能帮忙解决这个问题吗?真的很困惑。

DESC 产品:

SQL result

Host: localhost
Database: prodpurchase
Generation Time: Mar 24, 2013 at 03:52 PM
Generated by: phpMyAdmin 3.2.4 / mysql 5.1.41
SQL query: Desc Products; 
Rows: 7

Field             Type            Null      Key      Default    Extra
ProdID            int(5)          NO        PRI       NULL  auto_increment
ProdName          varchar(50)      NO       UNI       NULL   
ProdSupplier      varchar(250)     NO       UNI       NULL   
ProdDescription   varchar(250)     NO        NULL    
ProdDate          date             NO        NULL    
ProdPrice         double            NO       0   
ProdQuantity      int(50)        NO      NULL    

【问题讨论】:

【参考方案1】:

您可以利用 MySQL 的 INSERT...ON DUPLICATE KEY UPDATE

首先,您需要在列中添加UNIQUE 约束:productnamesupplier

ALTER TABLE products ADD CONSTRAINT tb_uq UNIQUE (productname, supplier)

一旦你执行了,

INSERT INTO products (productid, productname, proddescription, supplier, lastpurchasedate, quantityleft)
VALUES (pid, pname, pdesc, psupp, pdate, pquant)
ON DUPLICATE KEY UPDATE quantityleft = quantityleft + pquant;

【讨论】:

你知道吗,你真的很聪明!几乎我所有的数据库项目都是因为你而成功完成的。谢谢! 作为菲律宾人,我更加自豪。非常感谢。上帝保佑你和你的家人。 嘿伙计,我的代码有错误。每当我与供应商同名时,它都会说重复。我想实现,一个产品可能有很多供应商,一个供应商可能有很多产品。类似的东西。希望我让你明白。 发布此声明的结果以及您的问题:DESC product 对不起,我不明白。什么意思?

以上是关于Mysql 使用存储过程将 2 个值与 2 列从 vb6 到数据库进行比较的主要内容,如果未能解决你的问题,请参考以下文章

c#调用oracle存储过程,返回2个值

将mysql中的列从上到下行求和并选择值所在的行

MYSQL 存储过程 - 如果满足某些条件,则更新多个列

MySQL:将列从数据库 1.TableS 添加到数据库 2.TableS

总结 MySQL 中的前 5 个值

如何拆分文本文件并在一行中存储 2 个值?