根据最后一条记录插入具有一个列值的行


insert a row with one column value based on last record

我需要在表中插入一个新添加的产品。但要做到这一点,我需要检查最后插入的产品的SKU,并将其增加1,并插入新的产品详细信息。SKU类似于SKUNXXXXX——X是一个数字。修改表结构是不可能的

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

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

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

请告诉我如何解决这个问题。

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

然而,这里有一个潜在的简单解决方法。如果您的SKU值确实总是具有SKUNXXXXX格式,其中XXXXX是某个数字,那么您可以简单地添加一个自动增量列,并在查询时动态创建SKU值。因此,可以创建一个名为products的表,其中包含以下列:

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

每次在products上执行INSERT时,id列将被MySQL自动增加。当您想要获取SKU时,您可以简单地执行如下查询:

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

如果您希望SKU号码不是永久的(即一旦分配给给定的产品,它可以重新分配给另一个新产品),那么您可能会考虑重置自动增量id列,参见此SO帖子获取更多信息。

相关文章: