mysql - 使用每行具有不同值的公式更新 mysql 行

标签 mysql

我有两个表:

表 1:部件

  • id(主键)
  • 代码
  • 标题
  • 数量

表 2:bill_items

  • id(主键)
  • 账单 ID
  • parts_id:指表部件的主键
  • 数量

每次我在表 bill_items 中创建一行时,我想更新零件表 - 数量。零件表中的数量将减少 bill_items 的数量。一次性可能会对表 bill_items 进行 N 次更新。想要使用单个 INSERT....ON DUPLICATE 或 UPDATE 语句。

感谢您的宝贵时间。

最佳答案

我认为对于这种情况最好使用触发器:

DELIMITER $$
    CREATE
        TRIGGER `bill_items_after_insert` AFTER INSERT 
        ON `bill_items` 
        FOR EACH ROW BEGIN

            UPDATE parts set quantity = quantity - NEW.qty WHERE id = NEW.parts_id;

        END$$
DELIMITER ;

我建议您还为 UPDATE 和 DELETE 创建触发器,以保证数据一致性。

已更新

根据您的评论,可以使用正常插入和使用事务更新来实现数据一致性:

START TRANSACTION;
INSERT INTO bill_items (bill_id, parts_id, qty) VALUES (your_bill_id,your_parts_id,your_qty);
UPDATE parts SET quantity = quantity - your_qty WHERE id = your_parts_id;
COMMIT;

关于mysql - 使用每行具有不同值的公式更新 mysql 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52640070/

相关文章:

php - 如何删除具有最少信息集的重复行?

mysql - 小花 3.1.4 : Database_Exception [ 2 ]: mysql_connect(): Access denied

php - MySQL SELECT 3 随机和一个静态行

mysql - 查找上次运行 MySql 事件的时间

mysql - 将子查询中的列添加到主查询的 SELECT 中,而不应用主查询中 WHERE 的过滤器

mysql - MySQL 中没有文件排序的表中可以有 TEXT/BLOB 列吗?

mysql - 授予读取 View 的权限,但拒绝其他表的权限

MySQL - 在一个查询中 INSERT 之前的 COUNT

php - 二键一值pdo查询结果

php - 组合两个 MySQL 查询?