mysql加载数据infile auto_increment mutiple incrementation

时间:2016-11-17 16:07:40

标签: mysql

多次执行同一文件时,自动增量值将出错。 我的文件是sample.csv

name,phone,address
a,9401003026,dsa
b,9658746542,fsa
c,9865742310,hgfh
d,9865869537,hf
e,9401003026,hf
s,9658746542,hf
h,9865742310,hf
j,9865869537,hf

我的查询是

LOAD DATA LOCAL INFILE '/home/anson/AnsonBackup/python/newtest/sample.csv'    
           INTO TABLE `sample`  COLUMNS TERMINATED BY ','  
           LINES TERMINATED BY '\n' IGNORE 1 LINES 
           (named,phone,address);

如果我超过一次id的值将是8但是当我重新执行同一个文件时,id从16开始。为什么????

我的桌子是

CREATE TABLE `sample` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `named` VARCHAR(30) DEFAULT NULL,
  `phone` VARCHAR(30) DEFAULT NULL,
  `address` VARCHAR(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=latin1

2 个答案:

答案 0 :(得分:0)

如果可能,永远不要依赖auto_increment列来获得某些值,因为您描述的问题可能会发生。每次插入表格时,id都会增加。

如果需要,您也可以在csv中包含id字段,因此您的导入句子将是:

LOAD DATA LOCAL INFILE '/home/anson/AnsonBackup/python/newtest/sample.csv'    
       INTO TABLE `sample`  COLUMNS TERMINATED BY ','  
       LINES TERMINATED BY '\n' IGNORE 1 LINES 
       (id, named, phone, address);

或者,如果你不能这样做,你必须重置计数器,如下所示:

ALTER TABLE tablename AUTO_INCREMENT = 1;

使用正确的auto_increment而不是1.有关详细信息,请访问:related answer

答案 1 :(得分:0)

最后我得到了答案

我们必须将其ENGINE从INNODB更改为MyISAM

CREATE TABLE `sample` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `named` VARCHAR(30) DEFAULT NULL,
  `phone` VARCHAR(30) DEFAULT NULL,
  `address` VARCHAR(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
)  ENGINE=MyISAM DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;