有表如下:
users | CREATE TABLE `users` (
`uid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '',
`user_class` tinyint(11) NOT NULL DEFAULT '0' COMMENT '',
`user_login` varchar(50) NOT NULL DEFAULT '' COMMENT '',
`user_pass` varchar(50) NOT NULL DEFAULT '' COMMENT '',
`user_name` varchar(60) NOT NULL DEFAULT '' COMMENT '',
UNIQUE KEY `USER_LOGIN` (`user_login`),
KEY `USER_NAME` (`user_name`),
KEY `USER_CITY` (`user_city`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |执行:
-- 对应`uid`增1,比如这里是2
insert into users(user_login) values('小明'); -- 多次执行该语句返回1062错误,因为user_login有UNIQUE约束。
insert into users(user_login) values('小明');
insert into users(user_login) values('小明');
insert into users(user_login) values('小明');-- 插入准确,但uid不是接着上次正确执行后的ID,即不是3,而是(2+错误语句执行的次数),得出结论,即使返回类似如1062错误未能成功插入数据的,uid AUTO_INCREMENT仍然也会+1。
insert into users(user_login) values('小红'); --这里的uid是6,而不是3.求原理解析,如何做到在数据库层面让AUTO_INCREMNT字段连续。
users | CREATE TABLE `users` (
`uid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '',
`user_class` tinyint(11) NOT NULL DEFAULT '0' COMMENT '',
`user_login` varchar(50) NOT NULL DEFAULT '' COMMENT '',
`user_pass` varchar(50) NOT NULL DEFAULT '' COMMENT '',
`user_name` varchar(60) NOT NULL DEFAULT '' COMMENT '',
UNIQUE KEY `USER_LOGIN` (`user_login`),
KEY `USER_NAME` (`user_name`),
KEY `USER_CITY` (`user_city`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |执行:
-- 对应`uid`增1,比如这里是2
insert into users(user_login) values('小明'); -- 多次执行该语句返回1062错误,因为user_login有UNIQUE约束。
insert into users(user_login) values('小明');
insert into users(user_login) values('小明');
insert into users(user_login) values('小明');-- 插入准确,但uid不是接着上次正确执行后的ID,即不是3,而是(2+错误语句执行的次数),得出结论,即使返回类似如1062错误未能成功插入数据的,uid AUTO_INCREMENT仍然也会+1。
insert into users(user_login) values('小红'); --这里的uid是6,而不是3.求原理解析,如何做到在数据库层面让AUTO_INCREMNT字段连续。
解决方案 »
- navicat 无法传入 时间格式 的字符串变量
- mysql的order by convert(column using gbk) asc怎么提升性能?
- Beware of big rollbacks of mass inserts的理解?
- SQL慢查询优化
- 一个复杂的数据库结构,查询语句问题
- 怎样将新的行或列添另到指定的位置
- 远程访问linux下面的mysql极其缓慢
- 急,熟悉linux命令的高手请帮忙!!在linux的客户机上怎么用命令导mssql数据库(表结构跟数据)到一个文件中去!!
- 如何往数据库中添加“字符画”??
- mysql 索引问题
- 千万级别mysql汉字查询如何更快?
- 为什么我这句SQL代码,索引不起作用。
另外如果你要确保字段为连续,则不能使用AUTO_INCREMNT,使用AUTO_INCREMNT的本身并无任何意义,仅用于一个唯一字段的确认。