mysql - LOAD DATA INFILE 不导入 CSV 数据源中的所有行

标签 mysql sql database csv load-data-infile

我正在尝试将 CSV 文件中的数据加载到 MySQL 数据库中,并注意到在导入文件时似乎跳过了大量记录。

数据来自政府来源,格式非常奇怪,在不寻常的地方用单引号等。这是未插入记录的示例:

"'050441'","STANFORD HOSPITAL","CA","H_HSP_RATING_7_8","How do patients rate the hospital overall?","Patients who gave a rating of'7' or '8' (medium)","22","300 or more","37",""

然而,这条记录确实被插入了:

"'050441'","STANFORD HOSPITAL","CA","H_HSP_RATING_0_6","How do patients rate the hospital overall?","Patients who gave a rating of '6' or lower (low)","8","300 or more","37",""

我用来加载数据的 SQL 在这里:

mysql> load data infile "c:\\HQI_HOSP_HCAHPS_MSR.csv" into table hospital_qualit
y_scores fields terminated by "," enclosed by '"' lines terminated by "\n" IGNOR
E 1 LINES;

我正在加载数据的表格格式如下:

分隔符 $$

CREATE TABLE `hospital_quality_scores` (
  `ProviderNumber` varchar(8) NOT NULL,
  `HospitalName` varchar(50) DEFAULT NULL,
  `State` varchar(2) DEFAULT NULL,
  `MeasureCode` varchar(25) NOT NULL,
  `Question` longtext,
  `AnswerDescription` longtext,
  `AnswerPercent` int(11) DEFAULT NULL,
  `NumberofCompletedSurveys` varchar(50) DEFAULT NULL,
  `SurveyResponseRatePercent` varchar(50) DEFAULT NULL,
  `Footnote` longtext,
  PRIMARY KEY (`ProviderNumber`,`MeasureCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

有人知道为什么会这样吗?似乎只有一部分记录被正确插入。

最佳答案

会不会是您的主键阻止了插入额外数据?

查找已插入的 ProviderNumber 为“'050441'”且 MeasureCode 为“H_HSP_RATING_7_8”的记录,如果您有其中之一,那么这是重复键问题。

您可能需要将“AnswerDescription”添加到主键以解决此问题。

问候,

戴夫

关于mysql - LOAD DATA INFILE 不导入 CSV 数据源中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053764/

相关文章:

mysql - 试图构造一个左连接来查询多对多关系中的数据库表

php - 如何防止 PHP 中的 SQL 注入(inject)?

c# - .Net SqlDataAdapter 和 SQL Server 中的触发器

mysql - 子查询值的总和

php - 找不到数据库

PHP 语法错误 - 无法弄清楚

iphone - 如何在sqlite IPHONE中获取rowNum之类的列

c# - 错误: You have specified an invalid column ordinal

database - 查询对空值给出 1

mysql - 是否可以检查特定查询在 MySQL 中打开了多少文件?