实验4.1 录入数据至表
【实验目的】
①掌握使用MySQL Workbench的导入向导功能把CSV文件的数据导入表中。
②掌握使用MySQL Workbench的图形界面工具录入数据到表中。
③掌握使用SQL中的INSERT INTO语句插入数据到表中。
④掌握使用SQL中的LOAD DATA语句加载数据到表中。
【实验内容】
①利用MySQL Workbench的导入向导功能把products.csv中的数据导入表products中。
②使用MySQL Workbench的图形界面工具录入数据至表customers。
③使用INSERT INTO 语句插入数据至表agents 中。
④使用LOAD DATA语句加载数据至表orders 中。
说明:数据库sales包含4个关系表,表的内容见附录的表14.1—表14.4。
【实验步骤】
(1)用图形界面工具导入数据
利用MySQL Workbench的导入向导功能,将products.csv中的数据导入表products中。
①启动Excel编辑products.xls数据文件,如图4.1所示。

图4.1 Excel格式的products.xls数据文件
② 选择菜单命令“文件”→“另存为”,将Excel文件另存为CSV格式的文件(图4.2),CSV默认为逗号分隔,用记事本打开products.csv文件,如图4.3所示。

图4.2 将Excel文件另存为CSV格式的文件

图4.3 用记事本打开products.csv文件
③启动MySQL Workbench,连接MySQL 服务器,显示“MySQL Workbench”界面。
④在界面左侧“Navigator”导航栏的“Schemas”选项页中依次展开节点“sales”→“Tables”,右击表“products”,在快捷菜单中选择“Table Data Import Wizard”,如图4.4所示。

图4.4 在快捷菜单中选择“Table Data Import Wizard”
⑤显示“Table Data Import”对话框,单击“Browse...”按钮,选择之前保存的products.csv文件,如图4.5所示,然后单击“Next >”按钮。

图4.5 “Table Data Import”对话框
⑥显示“Select Destination”页,确认选择“Use existing table”,文本栏为“sales.products”,如图4.6所示,然后单击“Next >”按钮。

图4.6 “Select Destination”页
⑦显示“Configure Import Settings”页,如图4.7所示,单击“Next >”按钮。

图4.7 “Configure Import Settings”页
⑧显示“Import Data”页,如图4.8所示,单击“Next >”按钮。如果导入的数据文件成功执行,如图4.9所示,然后单击“Next >”按钮。

图4.8 “Import Data”页

图4.9 “Import Data”页——导入数据文件成功
⑨显示“Import Results”页,如图4.10所示,单击“Finish”按钮。

图4.10 “Import Results”页
⑩查看导入结果。在界面左侧的“Navigator”导航栏的“Schemas”选项页中依次展开节点“sales”→“Tables”,右击“products”,在快捷菜单中选择“Select Rows-Limit 1000”选项,在查询窗口中显示products表的数据内容,并与products.csv中的数据进行对照,如图4.11所示。

图4.11 查看导入结果
(2)在图形界面工具中录入数据
在MySQL Workbench中,录入相关的数据至表customers中。
①在界面左侧的“Navigator”导航栏的“Schemas”选项页中依次展开节点“sales”→“Tables”,右击表“customers”,在快捷菜单中选择“Select Rows-Limit 1000”选项,在“Result Grid”窗口中显示customers表的数据内容,此时数据表内容为空。
②在打开的空的数据表中,录入相关数据到表customers中,如图4.12所示。

图4.12 录入相关数据到表customers
③数据全部录入结束后,单击“Apply”按钮,显示“Apply SQL Script to Database”对话框,如图4.13所示。继续单击“Apply”按钮,在下一个对话框(图4.14)中单击“Finish”按钮,将数据保存数据表,操作完成。

图4.13 “Apply SQL Script to Database”对话框1

图4.14 “Apply SQL Script to Database”对话框2
(3)使用INSERT INTO 语句插入数据
使用INSERT INTO 语句将所有需要的数据插入至表agents 中。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口输入下面的SQL语句,插入记录到agents表。
INSERT INTO agents VALUES ('a01', 'Smith', 'New York', 6);
INSERT INTO agents (aid, aname, city, percent)
VALUES ('a02', 'Jones', 'Newark', 6), ('a03', 'Brown', 'Tokyo', 7), ('a04', 'Gray', 'New York', 6);
INSERT INTO agents VALUES ROW ('a05', 'Otasi', 'Duluth', 5), ROW ('a06', 'Tom', 'Dallas', 5);
③单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前均为绿色小钩,则说明3条语句均执行成功,如图4.15所示。

图4.15 语句执行成功
④查询agents表的内容,最后结果如图4.16所示。

图4.16 agents表的数据
(4)使用LOAD DATA语句导入数据
使用LOAD DATA语句将数据导入表orders 中。(https://www.daowen.com)
①启动Excel编辑orders.xls数据文件,如图4.17所示。

图4.17 Excel格式的orders.xls数据文件
②将Excel文件另存为文本文件(制表符分隔),最好保存在英文路径下,如图4.18所示。然后用记事本打开orders.txt文件,如图4.19所示。

图4.18 将Excel文件另存为文本文件(制表符分隔)

图4.19 用记事本打开orders.txt文件
③在图标菜单中单击第一个图标
,新建一个查询窗口。
④在查询窗口输入下面的SQL语句:
LOAD DATA INFILE 'E:\\bak\\orders.txt'
INTO TABLE orders
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
⑤单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果“Output”面板提示信息显示“Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement”,则说明语句未执行成功,将需要执行步骤⑥—⑧。
⑥另建一个SQL查询窗口,输入图4.20的SQL语句,执行后显示全局变量secure_file_priv的值。
• 如果secure_file_priv 为 NULL,则表示MySQL不允许导入或导出。
• 如果secure_file_priv 为某个目录,则表示MySQL限制只能在该目录中执行导入导出,其他目录不能执行。
• 如果secure_file_priv 没有值,则表示MySQL不限制在任意目录的导入导出。

图4.20 显示全局变量secure_file_priv的值
⑦修改全局变量secure_file_priv的值。在“C:/ProgramData/MySQL/MySQL Server 8.0”下找到my.ini文件(图4.21),使用记事本打开该文件编辑,注释掉原“secure_file_priv”行,新增“secure_file_priv=" " ”,如图4.22所示,保存该文件,如果保存时提示的信息如图4.23所示,则先将此文件保存到其他文件夹,再复制并覆盖原目录下my.ini文件。

图4.21 my.ini文件位置

图4.22 记事本编辑my.ini文件

图4.23 保存时提示信息
⑧重新启动MySQL服务。右击“我的电脑(计算机)”图标,在快捷菜单中选择“管理”,在“计算机管理”对话框中单击左边“服务和应用程序”→“服务”,在显示的服务中找到“MySQL80”服务,再次右击并在弹出菜单中选择“重新启动”选项,重新启动MySQL服务,如图4.24所示。
⑨重新启动MySQL Workbench, 重新执行步骤④的语句。
⑩如果在“Output”输出区域面板中提示信息显示“Error Code: 1330.Invalid utf8mb4 character string:’? ’”,则说明语句仍未执行成功,需要执行步骤⑪。

图4.24 重新启动MySQL服务
⑪修改orders.txt的编码为“UTF-8”。记事本打开orders.txt,选择菜单“文件”→“另存为”,在“另存为”对话框,选择编码为“UTF-8”,如图4.25所示,然后单击“保存”按钮。

图4.25 修改orders.txt的编码
⑫重新执行步骤④的语句。观察“Output”输出区域面板,如果提示信息前为绿色小钩,则表示语句执行成功。如果发现提示信息前有黄色三角报警信息,比如显示“10 row(s) affected, 10 warning(s): 1265 Data truncated for column 'dollars' at row 1 …… Records: 10 Deleted: 0 Skipped: 0 Warnings: 10”,则说明语句虽然执行成功,但存在1265编号的报警信息,'dollars'字段的数据被截断,可以忽略该报警。
⑬查看导入结果。在界面左侧的“Navigator”导航栏的“Schemas”选项页,依次展开节点“sales”→“Tables”,右击表“orders”,在快捷菜单中选择“Select Rows-Limit 1000”选项,在查询窗口中显示orders表的数据内容,如图4.26所示,并与orders.txt中的数据对照。

图4.26 导入orders表的数据