从CSV文件导入到mysql数据库ERROR

时间:2016-07-14 11:22:52

标签: mysql csv command-line insert auto-increment

我正在尝试将一些记录从csv文件导入到mysql表中。在我的表格中,我有一个 id 字段会自动递增。当我从MySQL命令行使用以下命令导入我的数据时,字段ID会错误地增加:如果在我的数据库中,最后一个id是3 - >它插入的第一个记录有id 5.为什么要跳过一个?

LOAD DATA LOCAL INFILE 'db.csv' INTO TABLE product
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES
  (code, description, name, price, stockLevel);

db.csv文件:

enter image description here

我没有从csv中插入此id字段(代码是其他内容)。

4 个答案:

答案 0 :(得分:0)

我的猜测是你之前添加了一行并删除了它,因此保留了ID。

您可以使用自动增量命令

强制它从特定点开始,例如id 3
ALTER TABLE product AUTO_INCREMENT = 4;

然后你可以运行csv import。

我复制了你的表并运行你的代码,没有任何数字跳过。

答案 1 :(得分:0)

您的文件中最后可能有一个空行。您需要重新创建该表。

show create table [YOUR TABLE];

CREATE TABLE TEST.TEMP[YOUR TABLE] SELECT * FROM [YOUR TABLE];
DROP TABLE [YOUR TABLE];
CREATE TABLE [YOUR TABLE]
--- 
---
---

INSERT INTO [YOUR TABLE] SELECT 0 , code, description, name, price, stockLevel FROM TEST.TEMP[YOUR TABLE];

希望这有帮助。

答案 2 :(得分:0)

用户 grandepivko 似乎是对的。

将AUTO_INCREMENT设置回1(或至少是它的努力)将下一个AI设置为正确的值。

因此,最重要的是在<{em> AUTO_INCREMENT之后将LOAD DATA INFILE设置回1

ALTER TABLE product AUTO_INCREMENT=1;

drop table if exists product;
create table product
(
    id int auto_increment primary key,
    code int not null,
    description varchar(100) not null,
    name varchar(100) not null,
    price decimal(10,2) not null,
    stockLevel int not null
);

LOAD DATA LOCAL INFILE 'c:\\nate\\load_drinks01.txt' INTO TABLE product
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES
  (code, description, name, price, stockLevel);

select * from product; -- has products 1,2,3 for AUTO_INC id

select `AUTO_INCREMENT`
from  INFORMATION_SCHEMA.TABLES
where TABLE_SCHEMA = 'so_gibberish' -- database name
and   TABLE_NAME   = 'product'; -- table name
-- value is now 5

ALTER TABLE product AUTO_INCREMENT=1;

select `AUTO_INCREMENT`
from  INFORMATION_SCHEMA.TABLES
where TABLE_SCHEMA = 'so_gibberish' -- database name
and   TABLE_NAME   = 'product'; -- table name
-- value is now 4

LOAD DATA LOCAL INFILE 'c:\\nate\\load_drinks01.txt' INTO TABLE product
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES
  (code, description, name, price, stockLevel);

select * from product; -- has products 1,2,3,4,5,6 for AUTO_INC id

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'so_gibberish' -- database name
AND   TABLE_NAME   = 'product'; -- table name
-- value is now 8

ALTER TABLE product AUTO_INCREMENT=1;
SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'so_gibberish' -- database name
AND   TABLE_NAME   = 'product'; -- table name
-- value is now 7

来自以下Bug Report,摘录:

  

[2013年3月12日23:50] Don Hui Btw,还有另一种解决方法   alter table AUTO_INCREMENT COUNTER为1,因此它会重置为最大值   记录数量:

     

ALTER TABLE表AUTO_INCREMENT = 1

     

在该表的AUTO_INCREMENT重置为PRIMARY KEY的MAX + 1值

之后

答案 3 :(得分:-1)

ALTER TABLE table_name AUTO_INCREMENT = 1;