【问题标题】:insert and update with stored procedure使用存储过程插入和更新
【发布时间】:2017-02-04 18:09:27
【问题描述】:

我的存储过程有问题(在 MySQL 上)。如果记录存在,我需要表的数据更新过程,否则插入记录。我有:

DELIMITER //

CREATE PROCEDURE saveorUpdate(in product varchar(30), price int, stock int, active varchar(5))

BEGIN

DECLARE id int;

SELECT id_pro FROM products WHERE product=product into id;

IF(id_pro=id)THEN

UPDATE products SET product=product, price=price, stock=stock, active=active 
WHERE id_pro=id;

ELSE

INSERT INTO products (product, price, stock, active) VALUES 
(product, price, stock, active);

END IF;
END

有什么想法吗?

【问题讨论】:

  • 为什么要使用存储过程?您可以使用 REPLACE... INTO ... 语句通过单个 SQL 执行此操作。在这种情况下,您需要根据主键列进行替换。
  • 会将其视为一种实现方式。

标签: mysql sql stored-procedures


【解决方案1】:

由于您的数据库是 MySQL,您可以只使用 INSERT INTO ... ON DUPLICATE KEY 语法并废弃存储过程的内容。

INSERT INTO products (
  product, price, stock, active
) VALUES (
  $product, $price, $stock, $active
) ON DUPLICATE KEY UPDATE
  product=VALUES(product)
 , price=VALUES(price)
 , stock=VALUES(stock)
 , active=VALUES(active)

只是一个想法。可能是一种更简洁、更快速的编写替代方案。

希望有帮助

【讨论】:

    【解决方案2】:

    这是问题的答案 - 带有 INSERT 的存储过程,在 DUPLICATE 上更新。

    CREATE DEFINER=`root`@`localhost` PROCEDURE `manage-business`
    (IN `bname` VARCHAR(200)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 
    INSERT INTO tbl_company (co_name) VALUES (bname) ON DUPLICATE key UPDATE co_name=bname;
    

    【讨论】:

      猜你喜欢
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      • 2022-07-30
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      相关资源
      最近更新 更多