5.3.3 将数据加载到表中
创建表后,您需要将其填充。LOAD DATA
和INSERT
语句对此非常有用。
假设您的宠物记录可以按以下方式描述。(注意MySQL期望日期格式为'
,这可能与您习惯的不同。)YYYY-MM-DD
'
name | owner | species | sex | birth | death |
---|---|---|---|---|---|
Fluffy | 哈罗德 | 猫 | 雄性 | 1993-02-04 | |
Claws | 格温 | 猫 | 雌性 | 1994-03-17 | |
Buffy | 哈罗德 | 狗 | 雄性 | 1989-05-13 | |
Fang | 本尼 | 狗 | 雌性 | 1990-08-27 | |
Bowser | 戴安娜 | 狗 | 雌性 | 1979-08-31 | 1995-07-29 |
Chirpy | 格温 | 鸟 | 雌性 | 1998-09-11 | |
Whistler | 格温 | 鸟 | 1997-12-09 | ||
Slim | 本尼 | 蛇 | 雄性 | 1996-04-29 |
由于您开始时的表为空,因此一种简单的方法是创建一个文本文件,其中包含每个动物的一行,然后使用单个语句将文件内容加载到表中。
您可以创建一个文本文件pet.txt
CREATE TABLE
语句中列的顺序给出。对于缺失值(例如未知性别或死亡日期),可以使用NULL
值。在文本文件中,使用\N
(反斜杠,capital-N)表示这些值。例如,对于鸟Whistler的记录将如下所示(其中之间的空格是一个单个制表符字符):
Whistler Gwen bird \N 1997-12-09 \N
要将文本文件
pet.txt
加载到pet
表中,使用以下语句:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
如果您在Windows上使用了一个使用
\r\N
作为行终止符的编辑器,那么应该使用以下语句代替:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
LINES TERMINATED BY '\r\n';
(在运行macOS的Apple机器上,您可能想要使用
LINES TERMINATED BY '\r'
。)
您可以在
LOAD DATA
语句中显式指定列值分隔符和行结束标记,如果需要,但默认情况下是制表符和换行符。这些默认值足以使语句正确地读取文件pet.txt
。
如果语句失败,可能是您的MySQL安装没有启用本地文件能力的默认设置。请参阅第8.1.6节,“LOAD DATA LOCAL安全考虑”,了解如何更改此设置。
当您想逐一添加新记录时,INSERT
语句非常有用。在其最简单的形式中,您需要为每个列提供值,每个值都按在CREATE TABLE
语句中列出的顺序。假设戴安(Diane)获得了一只名为““Puffball.””的 hamster 您可以使用INSERT
语句来添加新记录,如下所示:
mysql> INSERT INTO pet
VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
在这里,字符串和日期值被指定为引号字符串。同时,在INSERT
中,您可以直接插入NULL
来表示缺失值。您不需要像在LOAD DATA
中那样使用\N
。
从这个示例中,您应该能够看到,如果使用多个INSERT
语句来加载初始记录,而不是单个LOAD DATA
语句,那么需要更多的输入工作。