MYSQL加载数据时会删除某些行

时间:2017-02-04 11:31:24

标签: mysql

我是MYSQL的新手,在将一些数据加载到表中后,某些行被删除,我遇到了问题。例如,假设我们有以下架构

(UserID INTEGER,UserInterests VARCHAR(200))

我有这样的数据

1|*|Sports
1|*|Gaming
1|*|Eat
2|*|Sports
2|*|Gaming
2|*|Sleep

我像这样执行负载

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE Users
FIELDS TERMINATED BY '|*|';

但是,具有相同UserInterests的行将被删除,因此当我执行以下查询时

SELECT * FROM Users;

我得到了

1 EAT
1 Gaming
2 Sleep
1 Sports

但我希望得到像

这样的东西
1 EAT
1 Gaming
1 Sports
2 Sleep
2 Sports
2 Gaming

有人可以解释我在做错的地方吗?

1 个答案:

答案 0 :(得分:0)

如果您的列UserInterests具有唯一索引(例如主键),那么这将是预期的行为。唯一索引将阻止您多次拥有相同的数据。通常,您会收到重复键错误,但是当您在LOCAL中使用LOAD DATA LOCAL INFILE时,您会收到警告,请参阅documentation

  

LOCAL也会影响错误处理:

     
      
  • 使用LOAD DATA INFILE,数据解释和重复键错误会终止操作。

  •   
  • 使用LOAD DATA LOCAL INFILE,数据解释和重复键错误会成为警告,并且操作会继续,因为服务器无法在操作过程中停止传输文件。对于重复键错误,这与指定IGNORE时相同。 IGNORE将在本节后面进一步解释。

  •   

请检查并更正索引。我假设您当前使用UserInterests作为该表中的主键,而您可能需要一个由两列组成的主键。