如何根据以前的列值更新 sql 列

How to update sql column based on previous column values

我有一个 table,它的列是 id(int)、order_id(int)、partner_id(int)

现在我想在 partner_id 的基础上递增 order_id , 例如 对于合作伙伴 1,order_id 是 1,2,3 那么如果合作伙伴 2 正在下订单,order_ids 应该再次从 1 而不是从 4 开始。

在 mysql 中最好的方法是什么?每次我想创建新订单时,我是否应该从数据库中读取特定合作伙伴的最后订单 ID?

我正在使用 mysql 和 sequelize

在与我的情况类似的情况下,我首先在订单 table 上创建了一个名为 order_number 的列。

然后创建一个 mysql function 以根据函数的参数和顺序 table 获得预期的 order_number

然后在插入时我用适当的参数调用了 mysql 函数。

下面是 mysql 函数在我的例子中的样子:

正在创建函数:

DELIMITER $$
CREATE FUNCTION `get_order_number`(partner_id VARCHAR(255)) RETURNS int(10)
BEGIN
        DECLARE getCount INT(10);

        SET getCount = (
            SELECT COUNT(id)
            FROM order_table
            WHERE `partner_id` = partner_id
        ) + 1;

        RETURN getCount;
    END$$
DELIMITER ;

.

.

实施:

INSERT INTO (
  id, 
  order_id, 
  pertner_id
) VALUES (
  NULL,
  get_order_number(10),  -- 10 is partner_id
  10 -- 10 is partner_id
); 

.

.

函数说明

第 1 遍 partner_id 作为函数的参数。

我在函数中的第 2 个创建了一个 select 查询以获取该合作伙伴创建的订单数量。

最后将返回的数字加一 (1) 以获得最后一个值。

.

.

声明:

我已经使用这个功能 3 年多了,还没有遇到任何问题。但是这个函数有一个弱点:当我同时在两个 form/page 中同时提交表单时(以毫秒为单位),我得到了同时调用相同函数的死锁错误错误。由于我有中等用户,所以我在现实生活中还没有遇到过这个错误。

我在带有节点 js 的纯 mysql 驱动程序中使用此功能,尚未使用 sequelize 进行测试。

希望对您有所帮助。