根据最后一条记录插入一行列值

时间:2015-07-27 05:30:12

标签: php mysql

我需要在表格中插入新添加的产品。但要这样做,我需要检查最后插入产品的SKU并将其增加1并插入新产品详细信息。 SKU就像SKUNXXXXX - X是一个数字。无法更改表格结构。

我能想到的可能的解决方案是

  • 使用order by和limit 1获取最后一行。
  • 替换" SKUN"使用空字符串并将数字增加1
  • 插入包含产品详细信息和增加的SKU值的记录

但是这种情况可能会产生问题(虽然我不确定)。问题是 - 如果只是在获取最后一条记录之后,在插入新产品详细信息之前,另一个请求进入并获得相同的最后一条记录?在这种情况下,两种产品都具有相同的SKU。

请让我知道如何解决这种情况。

1 个答案:

答案 0 :(得分:0)

一个选项是创建自动增量id列,然后使用此选项为每个产品插入时创建SKU。然后,可以使用在INSERT之后触发的触发器为新插入的产品分配SKU。但是,MySQL不允许触发器修改触发它的表。

但是,这里有一个可能很容易的解决方法。如果您的SKU值实际上始终具有格式SKUNXXXXX,其中XXXXX是某个数字,那么您只需添加自动增量列,然后创建SKU值当你查询它时飞。因此,您可以创建一个名为products的表,其中包含以下列:

CREATE TABLE products
(
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(55),
    ...
);

每次在INSERT上执行products时,id列将自动由MySQL递增。如果您希望获得SKU,则只需执行以下查询:

SELECT id, name, CONCAT('SKUN', id) AS `SKU`
FROM products
WHERE name = 'someproduct'

如果您希望SKU号码不是永久的(即,一旦分配给某个产品,可以将其重新分配给另一个新产品),那么您可以考虑重置自动增量id列,qv this SO post了解更多信息。