1

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?
4

3 回答 3

0

当导致错误时,它似乎正在插入新行并增加唯一标识。出错时,您需要查询表以获取最新 ID 并重置自动增量值

ALTER TABLE `table_name` AUTO_INCREMENT =new_number_here

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

于 2013-06-25T12:30:20.363 回答
0

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

假设您的最后一个用户 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不会增加。

于 2013-06-25T13:41:16.447 回答
0

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

这是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插入数据时计数器将增加并且将忽略重复数据

于 2013-06-25T13:19:07.463 回答