我想知道自动增量字段的下一个值 我想测试一下:
select max(contactid) from contact
我加1 但我意识到它可以给我一个错误 举个例子 如果我插入一条记录,我将其删除 所以如果我在字段后插入会增加两个
我怎样才能实现这一目标? 谢谢
答案 0 :(得分: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
生成的ID。
<强> 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。
答案 1 :(得分:0)
你应该像这样使用LAST_INSERT_ID
:
SELECT LAST_INSERT_ID()
它将返回AUTO_INCREMENT
ID字段的最后一个值。
此处有更多详情:http://goo.gl/RkmR5
答案 2 :(得分:-1)
这将为您提供将插入的 next id值:
SELECT LAST_INSERT_ID() + 1;