我是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
有人可以解释我在做错的地方吗?
答案 0 :(得分:0)
如果您的列UserInterests
具有唯一索引(例如主键),那么这将是预期的行为。唯一索引将阻止您多次拥有相同的数据。通常,您会收到重复键错误,但是当您在LOCAL
中使用LOAD DATA LOCAL INFILE
时,您会收到警告,请参阅documentation:
LOCAL也会影响错误处理:
使用LOAD DATA INFILE,数据解释和重复键错误会终止操作。
使用LOAD DATA LOCAL INFILE,数据解释和重复键错误会成为警告,并且操作会继续,因为服务器无法在操作过程中停止传输文件。对于重复键错误,这与指定IGNORE时相同。 IGNORE将在本节后面进一步解释。
请检查并更正索引。我假设您当前使用UserInterests
作为该表中的主键,而您可能需要一个由两列组成的主键。