[英]Changing the value of a table field after it has already been inserted
我正在使用CMS系统,并使用一种smartform将字段插入表中。
在这些字段中,是产品名称,数量和成本。
成本和产品名称从产品表中获取,而数量则手动输入。
我知道这不是最好的体系结构,但是我所使用的系统受到限制。
我要做的是将插入后的成本值更改为数量*成本。
最简单的方法是什么?
更改一行:
update TheTable
set cost = quantity * cost
where pk = 123
如果您多次运行,成本将激增;-)
您可以在插入后使用新产品的标识字段运行UPDATE
:
UPDATE products
SET cost = cost * quantity
WHERE product_id = @productId
如果您的双手绑得太紧,以至于无法更改表的结构,那么您可能将无法使用触发器,但是无论如何都可以使用触发器。
这是一个示例表结构:
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 |
+----+--------------------+----------+---------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.