我需要在表中插入一个新添加的产品。但要做到这一点,我需要检查最后插入的产品的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帖子获取更多信息。