如何在mysql中镜像自动增量值并与另一列中的值组合
我在一个表中有一个自动递增的列如何在mysql中镜像自动增量值并与另一列中的值组合,mysql,sql,database,phpmyadmin,Mysql,Sql,Database,Phpmyadmin,我在一个表中有一个自动递增的列id,这很好,但我正在尝试创建一个order\u id列,该列将用户的帐户id与id的自动递增值相结合 因此,order\u id中的值如下所示: 33.1000 52.1001 69.1002 Etc 其中,点前的数字是帐户id,点后的数字是id的自动递增值 我该怎么做 我找到的类似答案适用于另一种数据库语言,或者是带有死链接的问题 我已经尝试过在插入后立即使用PHP更新数据库,并使用上次插入的id函数insert\u id,但我确信这可以在SQL中完成。您可以
id
,这很好,但我正在尝试创建一个order\u id
列,该列将用户的帐户id
与id
的自动递增值相结合
因此,order\u id
中的值如下所示:
33.1000
52.1001
69.1002
Etc
其中,点前的数字是帐户id
,点后的数字是id
的自动递增值
我该怎么做
我找到的类似答案适用于另一种数据库语言,或者是带有死链接的问题
我已经尝试过在插入后立即使用PHP更新数据库,并使用上次插入的id函数
insert\u id
,但我确信这可以在SQL中完成。您可以将该值构造为:
concat(account_id, '.', lpad(id, 4, '0'))
不幸的是,您不能将其用作列的生成值或默认值。这给了你两个选择
第一种是使用视图:
create table v_t
select t.*, concat(account_id, '.', lpad(id, 4, '0')) as order_id
from t;
或者使用触发器设置值。默认值表达式、生成的列或触发器都没有帮助。因此,将插入logic移动到存储过程中,或者使用一个动态生成组合值的视图。我尝试了以下触发器:
updateorders SET NEW.order\u id=CONCAT(NEW.account\u id',',NEW.id)
作为INSERT之前的和INSERT之后的,
但我一直遇到这样的错误:无法更新存储函数/触发器中的表“orders”,因为调用此存储函数/触发器的语句已经使用了它。
@twan。在触发器中不使用update
。您只需设置值:set new.order\u id=concat(new.account\u id,'.',lpad(new.id,4,'0'))
。谢谢,这是我第一次使用触发器。这是否意味着我必须获取最后一个插入的id,并在每次查询时将其插入id表?因为如果我将它留空,点后面的数字只需说0000
,而id
列显示正确的自动递增值。