mysql 这两种批量插入的区别是什么?尤其第一种导致了自增主键自增不连续,有什么决绝办法吗

MySql 码拜 8年前 (2017-04-30) 1819次浏览
第一种方式: 使用 union
但是会导致 插入 n条数据 主键自增n+1
举例:id为自增主键
先清空数据表
下面的语句一次插入2条。
第一次运行  第一条id =1 ,第二条id=2
第二次运行  第三条id =4 ,第四条id=5
第三次运行  第五条id =7 ,第六条id=8

INSERT INTO `versionfileinfo` (
	vid,
	buildNo,
	displayVersion,
	fileKey,
	fileSize,
	fileUrl,
	description,
	checkType,
	checkCode,
	createTime,
	lastUpdateTime,
	isActive,
	ts
)
VALUES
	(
		1,
		1,
		"显示版本",
		NULL,
		NULL,
		"www.asdasd.com",
		"描述",
		"a",
		"b",
		123,
		123123,
		1,
		123123
	),
(
		1,
		2,
		"显示版本",
		NULL,
		NULL,
		"www.asdasd.com",
		"描述",
		"a",
		"b",
		123,
		123123,
		1,
		123123
	)

第二种方式:不使用union

INSERT INTO `versionfileinfo` (
	vid,
	buildNo,
	displayVersion,
	fileKey,
	fileSize,
	fileUrl,
	description,
	checkType,
	checkCode,
	createTime,
	lastUpdateTime,
	isActive,
	ts
)
VALUES
	(
		1,
		1,
		"显示版本",
		NULL,
		NULL,
		"www.asdasd.com",
		"描述",
		"a",
		"b",
		123,
		123123,
		1,
		123123
	),
(
		1,
		2,
		"显示版本",
		NULL,
		NULL,
		"www.asdasd.com",
		"描述",
		"a",
		"b",
		123,
		123123,
		1,
		123123
	)

建表语句:

CREATE TABLE versionfileinfo (
  id INT NOT NULL PRIMARY KEY auto_increment,
  vid INT NOT NULL COMMENT "版本信息id" ,
  buildNo INT NOT NULL COMMENT "版本号" ,
  displayVersion VARCHAR (50) NOT NULL COMMENT "显示版本" ,
  fileKey VARCHAR (100) NOT NULL COMMENT "文件标识" ,
  fileSize BIGINT NOT NULL COMMENT "文件大小" ,
  fileUrl VARCHAR (1000) NOT NULL COMMENT "文件存放url" ,
  description VARCHAR (500) COMMENT "描述" ,
  checkType VARCHAR (50) COMMENT "校验方式" ,
  checkCode VARCHAR (500) COMMENT "校验码" ,
  createTime BIGINT NOT NULL COMMENT "秒级时间戳" ,
  lastUpdateTime BIGINT NOT NULL COMMENT "秒级时间戳" ,
  isActive bit NOT NULL COMMENT "删除标识" ,
  ts BIGINT NOT NULL COMMENT "毫秒级时间戳"
) ENGINE = INNODB DEFAULT CHARSET utf8;

求大大指点,主键额外增加是怎么回事呢?

解决方案

33

看了下资料,具体的原理本人也不太明白。大致给你个思路。
这是innodb的问题,使用MyISAM就不会这样。
其实主要就是这两个在处理AUTO_INCREMENT列时处理的方式不同。
详情请百度或Google

AUTO_INCREMENT列在InnoDB里怎么样工作

推荐个文章 http://blog.sina.com.cn/s/blog_502c8cc40100kift.html
可以拿来做参考。
再给个解决方案  : 每次执行完sql , flush privileges;

33

再给你一种解决方案 innodb_autoinc_lock_mode innodb_autoinc_lock_mode当innodb_autoinc_lock_mode = 0时正常。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql 这两种批量插入的区别是什么?尤其第一种导致了自增主键自增不连续,有什么决绝办法吗
喜欢 (0)
[1034331897@qq.com]
分享 (0)