在插入表字段后更改其值

时间:2010-07-03 08:21:21

标签: sql mysql

我正在使用CMS系统,并使用一种smartform我将字段插入表中。

在这些字段中是产品名称,数量和成本。

成本和产品名称取自产品表,而数量则是手动输入。

我知道这不是最好的架构,但我对我正在使用的系统有限制。

我想要做的是将插入后的成本值更改为数量*成本。

最简单的方法是什么?

3 个答案:

答案 0 :(得分:1)

更改一行:

update  TheTable
set     cost = quantity * cost
where   pk = 123

如果多次运行,费用将会爆炸; - )

答案 1 :(得分:0)

您可以使用新产品的标识字段在插入后运行UPDATE

UPDATE products
SET cost = cost * quantity
WHERE product_id = @productId

答案 2 :(得分:0)

如果你的手绑得太紧以至于你无法改变桌子结构,那么你可能无法使用触发器,但无论如何都要进行。

这是一个示例表结构:

DROP TABLE IF EXISTS `products`;

CREATE TABLE `products` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `product` VARCHAR(255),
    `quantity` INT(11) NOT NULL,
    `cost` DECIMAL(6,2) NOT NULL,
    PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

创建一个触发器,在将成本插入products表之前更新成本:

DELIMITER //
DROP TRIGGER IF EXISTS update_cost//
CREATE TRIGGER update_cost BEFORE INSERT ON products
FOR EACH ROW BEGIN
    SET NEW.cost = NEW.cost * NEW.quantity;
END;
//
DELIMITER ;

将几种产品插入表中:

INSERT INTO `products` (`product`, `quantity`, `cost`) VALUES
('Acme portable hole', 10, 20),
('Acme jet pack', 1000, 2);

费用自动更新:

SELECT * FROM prodcuts;

+----+--------------------+----------+---------+
| id | product            | quantity | cost    |
+----+--------------------+----------+---------+
|  1 | Acme portable hole |       10 |  200.00 |
|  2 | Acme jet pack      |     1000 | 2000.00 |
+----+--------------------+----------+---------+