我正在尝试将一些记录从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文件:
我没有从csv中插入此id字段(代码是其他内容)。
答案 0 :(得分:0)
我的猜测是你之前添加了一行并删除了它,因此保留了ID。
您可以使用自动增量命令
强制它从特定点开始,例如id 3ALTER 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;