2011-05-22 111 views
2

如何在不使字段本身自动递增的情况下复制自动递增Id字段的功能?我想在我的INSERT语句中,我需要以某种方式获取创建的最后一个ID,并在新条目上添加+1。但我不知道如何。任何帮助表示赞赏。使我自己递增的mysql id不自动增量

编辑:我结束了ypercube的建议,并保持id字段作为autoincrementing并使我的搜索字符串唯一。谢谢!

+3

不是明智的做法 - 高竞争条件风险 – 2011-05-22 21:54:58

+0

您可以使用'trigger'。当在表上完成“插入”时,它可以将'new.id'设置为'max(所有以前的id)+ 1'。但是正如OMG安全地建议的那样,只能做到这一点,而不是生产。参与完成数据库应该做的事情的风险。 – 2011-05-22 21:56:11

+0

嗯,我需要另一个字段作为我的主键,并且任何自动递增字段都必须设置为关键字,这就是为什么我无法使用Id自动递增的原因。 – Michael 2011-05-22 21:56:21

回答

1

您需要在一个查询中选择最高当前ID,然后在使用第二个查询插入时使用该ID。

为了避开比赛的条件,你可以创建一个表锁(讨厌)或使用交易(更好,但不理想)

+0

这本质上非常糟糕。它只有在以下情况下才有效:1)事务是SERIALIZIABLE [它要求使用两个语句的事务*;自动提交吮吸] 2)可以跳过密钥,因为事务可能被回滚。 – 2011-05-22 22:01:21