[英]Import from CSV file to mysql database ERROR
我正在嘗試將一些記錄從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字段(代碼是其他東西)。
我的猜測是您提前添加了一行並將其刪除,因此保留了該ID。
您可以使用autoincrement命令強制其從特定點開始,例如id 3。
ALTER TABLE product AUTO_INCREMENT = 4;
然后,您可以運行csv導入。
我復制了您的表並運行了您的代碼,沒有跳過任何數字。
您的文件中最后可能有一個空行。您需要重新創建表。
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];
希望這可以幫助。
看來用戶grandepivko是正確的。
將AUTO_INCREMENT設置回1(或至少將其調整)可將下一個AI設置為正確的值。
因此,最重要的是在LOAD DATA INFILE
之后將AUTO_INCREMENT
設置回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
從以下錯誤報告中 ,摘錄如下:
[2013年3月12日23:50] Don Hui Btw,還有另一個解決方法是將表AUTO_INCREMENT COUNTER更改為1,因此將其重置為最大記錄數:
ALTER TABLE表AUTO_INCREMENT = 1
該表的AUTO_INCREMENT重置為PRIMARY KEY的MAX + 1值之后
ALTER TABLE table_name AUTO_INCREMENT = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.