导入(import) 数据,是指把外部文件(通常是 CSV)读入表格,让每一行成为一条记录,每一列成为一个字段。实操题会提供一份小文件,要求你载入再检查。这项技能不是点一下”导入”按钮,而是选对设置,并证明结果与源文件一致。
本课只使用虚构数据。它属于数据库结构与验证,并建立在前面几课的字段类型和主键之上。
导入时哪些设置很重要?
四个选择决定表格能否导入正确。
- 分隔符(delimiter): 分隔字段的字符。使用文件实际采用的那一个,通常是逗号。
- 第一行含字段名称: 当第一行是标题行时勾选,这样它不会被存成一条记录。
- 文本限定符(text qualifier): 包住含有分隔符的值的引号。
- 字段类型与主键: 在载入数据之前,根据样本值设定每个类型并选好主键。
不同软件对这些选项的叫法不同。要找的是意思,不是确切的标签。
例题详解
一个虚构的文件 members.csv 内容如下:
MemberID,Name,DateJoined,Fee
M001,Aiman Rahim,2024-03-15,45.50
M002,"Tan, Mei Ling",2024-04-02,45.50
M003,Kumar Raj,2024-05-20,30.00
M004,Sofia Lim,2024-06-11,45.50
M005,Daniel Ong,2024-07-01,30.00
第一步,数一数源文件。 有 1 行标题和 5 行数据。表格应该有 5 条记录。
第二步,选择设置。 分隔符:逗号。第一行含字段名称:是。文本限定符:双引号,因为 “Tan, Mei Ling” 含有逗号。
第三步,设定类型和主键。 MemberID:文本,并设为主键。Name:文本。DateJoined:日期。Fee:货币。
第四步,导入并核对数量。 表格显示 5 条记录,与第一步一致。
第五步,抽查特殊的一行。 打开 M002。Name 必须在同一个字段里显示 Tan, Mei Ling,Fee 必须是 45.50。如果 Name 显示 “Tan”,而 Fee 显示 Mei Ling,就是限定符设置错了。
第六步,核对总额。 费用合计 45.50 + 45.50 + 30.00 + 45.50 + 30.00 = 196.50。用第二种方法验算:三笔 45.50 是 136.50,两笔 30.00 是 60.00,136.50 + 60.00 = 196.50。合计与源文件不符,就说明导入有问题。
要留意的错误
常见的失误是没有勾选”第一行含字段名称”。
错误结果: 表格有 6 条记录,第一条的 MemberID = “MemberID”,Name = “Name”,Fee = “Fee”。
标题行被当作数据载入了。因为 Fee 现在含有 “Fee” 这个词,该字段甚至可能被强制变成文本,使求和失效。
改正的方法是在做其他事情之前先比较记录数与源文件。文件有 5 行数据,所以出现 6 条记录就表示多载入了东西。删除错误的记录,勾选标题选项后重新导入,并再次检查类型。另一个要认识的症状:如果每一行都挤在同一列里,就是分隔符错了。
自我检测
1. 一个 CSV 文件有 1 行标题和 12 行数据。正确导入后,表格应有多少条记录?
查看答案
12 条记录。 标题行是字段名称,不是记录。
2. 导入之后,每一行都把整行内容放在第一个字段里,例如 “M001;Aiman Rahim;45.50”。最可能是哪项设置错了?
查看答案
分隔符(delimiter)。 文件用分号分隔字段,导入时却以为是逗号,所以没有发生拆分。
3. 值 Lee, Anna 在 CSV 中没有加引号。会出什么问题?
查看答案
逗号把它拆成两个字段,Lee 和 Anna。之后每个值都向后移一列,数据就和字段名称对不上了。
下一步
导入干净之后,学习如何发现被读成错误形式的值:发现数字与文本的错误解读。如果主键或类型仍不确定,请回头复习定义主键与验证条件。只读 SQL 练习实验室提供了一张内置的虚构表格可供查看。
导入出错往往是细小而容易漏看的地方。ICT 线上一对一补习的老师可以给你故意含有错误的文件,让你学会自己找出问题。