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?
答案 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
不会增加。