3

我想知道我想测试的自动增量字段的下一个值:

select max(contactid) from contact

我加了 1,但我意识到如果我插入一条记录并删除它,它可能会给我一个错误,所以如果我在字段之后插入,则会增加 2

我怎样才能做到这一点?谢谢你

4

3 回答 3

4

这个问题有多种解决方案:

1.(首选)停止尝试预测自增值

这是比较典型的情况,基本上是按照设计使用自增。这假设您在插入之前实际上并不需要自动增量值。你可以做的是:

DROP TABLE IF EXISTS t;
CREATE TABLE t (id INT UNSIGNED NOT NULL auto_increment, x INT NOT NULL, PRIMARY KEY(id));
INSERT INTO t (x) VALUES (100);
SELECT LAST_INSERT_ID();

调用SELECT LAST_INSERT_ID()将返回刚刚为您的INSERT.

2、专门设置ID生成表来生成ID

您可以创建一个仅包含自动增量列的表,如下所示:

DROP TABLE IF EXISTS id_generator;
CREATE TABLE id_generator (id INT UNSIGNED NOT NULL auto_increment, PRIMARY KEY(id));

然后,您可以使用以下命令生成一个新的唯一 ID:

INSERT INTO id_generator (id) VALUES (NULL);
SELECT LAST_INSERT_ID();

并使用该 ID 插入您实际使用的表中。只要所有生成的 ID 都来自这个 ID 生成表,就不会有冲突。然而,生成这些 ID 是有成本的,而且自动递增在这方面效率不高。

3.使用外部ID生成方案

这或多或少类似于解决方案 2,但根本不使用 MySQL 来生成 ID。您可以使用诸如生成字符串的 UUID/GUID 方案之类的东西,或者您可以使用诸如Snowflake 之类的东西来生成整数 ID。

于 2013-01-09T01:31:12.397 回答
0

你应该LAST_INSERT_ID这样使用:

SELECT LAST_INSERT_ID()

它将返回AUTO_INCREMENTID 字段的最后一个值。

更多细节在这里:http: //goo.gl/RkmR5

于 2013-01-08T23:17:37.820 回答
-1

这将为您提供插入的下一个id 值:

SELECT LAST_INSERT_ID() + 1;
于 2013-01-08T23:20:00.913 回答