SQL userID自动增量

时间:2013-06-25 12:23:37

标签: mysql sql database unique userid

Mysql数据库就是这样;

userID -> primaryKey, required, unsigned integer, auto increment, unique
usermail -> unique,varchar,required

我正在创建新用户。 userId是自动增量。如果之前插入了usermail,则会发生错误。我的问题是这个

Let's think that userID is between 1-9.(there are 9 users now). 
Somebody has inserted same usermail before and took error. 
After that,new user inserted another usermail but userID became 11 instead 10. 
Why? What should i do to make it 10?

3 个答案:

答案 0 :(得分:0)

当引起错误时,它似乎是插入一个新行并递增唯一ID。出错时,您需要查询表中的最新ID并重置自动增量值

ALTER TABLE `table_name` AUTO_INCREMENT =new_number_here

在此处找到:http://forums.mysql.com/read.php?20,16088,17748#msg-17748

答案 1 :(得分:0)

您必须将insert子句与下面的选择检查合并。

这是mysql的一种行为,它也会为错误和成功插入

递增计数器
INSERT INTO [table name] SELECT '[value1]', '[value2]' FROM DUAL
WHERE NOT EXISTS(
SELECT [column1] FROM [same table name]
WHERE [column1]='[value1]'
AND [column2]='[value2]' LIMIT 1    )

在这里,您可以看到如何使用此技术阻止insert子句insert-where-not-exists,插入数据时计数器将增加,并且将忽略重复数据

答案 2 :(得分:0)

是否有必要从数据库属性本身增加userID。因为我所说的是,在插入任何记录之前,只需从数据库中检索最后一个userID,将其存储在整数变量中,然后递增它并将其与新记录一起插回数据库。

说你的上一个用户ID是9。 使用此查询 - Select max(userID) from "your table";

int x=0;
SqlDataReader dr=com.ExecuteReader();
if(dr.HasRows)
{
    While(dr.Read())
    {
       x=Convert.ToInt32(dr.GetString(0).ToString);
    }
}
x=x+1;

现在,由于您有新的x值,因此可以使用新记录轻松将其插回数据库。 因此,将遵循自动增量,即使发生故障,也不会进行插入,并且UserID不会增加。