Php 根据上一条记录插入一行,其中包含一列值

Php 根据上一条记录插入一行,其中包含一列值,php,mysql,Php,Mysql,我需要在表中插入新添加的产品。但要做到这一点,我需要检查上次插入的产品的SKU,并将其增加1,然后插入新的产品详细信息。SKU类似于SKUNXXXX-X是一个数字。无法更改表结构 我能想到的可能解决办法是 使用order by和limit 1获取最后一行 将“SKUN”替换为空字符串,并将数字增加1 插入包含产品详细信息和增加的SKU值的记录 但这种情况可能会产生问题(尽管我不确定)。问题是-如果在获取最后一条记录之后,在插入新产品详细信息之前,另一个请求进入并获取相同的最后一条记录,该怎么

我需要在表中插入新添加的产品。但要做到这一点,我需要检查上次插入的产品的SKU,并将其增加1,然后插入新的产品详细信息。SKU类似于SKUNXXXX-X是一个数字。无法更改表结构

我能想到的可能解决办法是

  • 使用order by和limit 1获取最后一行
  • 将“SKUN”替换为空字符串,并将数字增加1
  • 插入包含产品详细信息和增加的SKU值的记录
但这种情况可能会产生问题(尽管我不确定)。问题是-如果在获取最后一条记录之后,在插入新产品详细信息之前,另一个请求进入并获取相同的最后一条记录,该怎么办?在这种情况下,两种产品具有相同的SKU


请告诉我如何解决这种情况。

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

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

CREATE TABLE products
(
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(55),
    ...
);
每次您在
产品
上执行
插入
,MySQL将自动增加
id
列。当您想要取出
SKU
时,您只需执行如下查询:

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

如果你想让代码> SKU <代码>号码不是永久的(即一旦分配给一个给定的产品,它可以被重新分配给另一个产品),那么你可以考虑重新设置自动增量<代码> ID >代码>栏,q.v以获取更多信息。你应该使用表锁定或事务处理为什么不使用自动递增列而不是字符串?@Barmar-我知道自动递增列是最好的方法,但我不能更改它,因为以前的开发人员在很多地方都使用过它,它会破坏东西。谢谢你的建议。然后使用@m0rtis saidBTW(关于以前的开发者)这样的事务。在那里做人工智能不是什么大不了的事。在项目上使用全文搜索并更改内容,+1 sql迁移