使用当前的auto_increment值作为同一INSERT查询中另一个字段的基础 - 这在MySQL中是否可行?

qeo*_*rge 2 mysql stored-procedures auto-increment

在我的表(MySQL)中,我有以下字段:

id - primary,auto_increment

hash - 基数36表示 id

我想一次填充两个字段,使用存储过程来计算INSERT上接收的值id的基数36.像这样的东西:

INSERT into `urls` (`id`,`hash`) VALUES (NULL,base36(`id`));
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,但我希望它说明了我想要实现的目标.这是可能的,如果是的话,怎么样?

注意:我只想使用一个查询,所以last_insert_id没有帮助(至少我理解).

tyl*_*erl 5

这个问题基本上是对另一个问题的重述.简而言之,自动增量字段的优点是值保证唯一,缺点是在INSERT执行之前该值不存在.

这是必然的情况.例如,您可以为给定的表检索下一个自动增量值的内容,但由于并发问题,您无法确定接下来执行的查询是否是获取该ID的查询.其他人可能会先拿它.因此,ID字段的分配必须是在插入记录时发生的原子获取和增量操作.

换句话说,虽然您可能希望在单个查询中执行此操作,但您根本不会这样做.有一种方法你可以理论上假装你只是通过在INSERT上附加一个触发器来执行一个查询,该触发器在事实之后添加你的ID字段的替代表示.或者,您可以使用基于提前知道的非自动增量ID字段.