2016-11-17 61 views
1

。 我的文件sample.csvMySQL的LOAD DATA INFILE AUTO_INCREMENT多发递增

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); 

,如果我excecute一次id的值将是8,但是当我重新执行同一个文件编号,从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 
+0

我想这SQLyog的社区 - 的MySQL GUI v 11.27(64位),(三)2001年至2013年Webyog公司 –

+0

当我excecute文件登时值最后一个ID将是8及其AUTO_INCREMENT不9.it显示为16,当我重新执行相同的文件的ID从16..why开始???? –

回答

0

最后我得到一个答案

我们必须从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; 
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

+0

我必须要依赖于自动递增。我不能通过这样的id(id,named,phone,address); –

+0

如果我使用ALTER TABLE表名AUTO_INCREMENT = 1;我必须每次执行此值(不止一次)以执行我的文件 –