Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中镜像自动增量值并与另一列中的值组合_Mysql_Sql_Database_Phpmyadmin - Fatal编程技术网

如何在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
列显示正确的自动递增值。