簡體   English   中英

從CSV文件導入到mysql數據庫錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM