0. 前言
这是MySQL学习系列文章的第四篇。在前几篇中依次介绍了如何安装、基本概念、基本语句,基本上能在控制台上把简单的数据库玩起来了。但是似乎会有些急功近利了,一上来直接就是干货、重点操作之类的,东拼西凑学得半桶水,稍微不那么常见一些的内容就不知道了。
本篇重点参考MySQL官方文档的第3章-Tutorial,对一些基本概念、语句等进行查漏补缺,也或许会发现一些有趣的内容。
本篇就相对轻松一些了,如果只是想简单使用MySQL,跳过本篇也是可以的~
系列文章回顾:
MySQL学习(1)-Windows环境安装和配置
MySQL学习(2)-基本概念、数据类型和简单语句
MySQL学习(3)-表格的“改”和“查”
1. 内容
-
SELECT语句可以用作简单的计算器:
SELECT SIN(PI()/4), (4+1)*5;
-
MySQL语句可以使用
\c
取消,但是只能是小写\c
。
对于只有1行的语句,也可以用
Esc
取消,而且毫无痕迹,但是只要分行了,就只能取消当前行了。 -
MySQL控制台的光标有好几种:
光标类型 | 说明 |
---|---|
mysql> | 等待输入新语句 |
-> | 语句未输入结束(忘记分号; 时总是能看到 😃) |
'> | 输入了字符串,但单引号' 不匹配 |
"> | 输入了字符串,但双引号" 不匹配 |
/*> | 输入了/* 开头的注释,未结束注释 |
-
USE db_name;
语句只能在单行中写完,如果强行回车并不会出现->
光标,而会报错:
-
登录MySQL服务器时,也可以在
-p
后不接空格直接提供密码,比如:mysql -u root -proot
(此处用户名和密码均为 root)。但是登录之后MySQL将作出警告:这样做并不安全。
-
当上一条中
-p
后面添加空格后,后面的内容将被识别为数据库名称,并且需要输入密码,适用于进入mysql时就想好使用哪个数据库的场合~
如果不放心是否成功地在使用某个数据库了,可以使用SELECT DATABASE();
查看当前使用的数据库:
-
除了采用
SHOW COLUMNS FROM tb_name;
之外,还可以用DESCRIBE tb_name;
来查看表格字段,甚至DESCRIBE
还可省略写成DESC
(没错,降序也是DESC
,可别混淆了)。
-
如果仅知道上一条,那我绝不可能再用
SHOW COLUMNS FROM
了,毕竟DESC
可比它简洁多了。但是别急,SHOW COLUMNS FROM
后可接WHERE
从句或LIKE
从句对列进行筛选:
“啊,亲爱的
SHOW COLUMNS
,我为刚才的莽撞切腹自尽~” -
另外,
DESCRIBTE
除了有小名(简写)DESC
之外,还有化名(同义语句)EXPLAIN
:
不过似乎大家不太爱用EXPLAIN
的这个功能,它的更强大之处在于可以采用EXPLAIN + SQL语句
查看该语句的执行过程。 以下是HELP EXPLAIN
的提示原文:DESCRIBE
更常被用于查看表结构信息,而EXPLAIN
被用于获取查询语句的执行计划。
如果对EXPLAIN
有更多兴趣,可以查看Explain官方文档。 -
MySQL语句还可以将语句写在一个SQL脚本中批量执行。共有2中方式可以选择:
- 在mysql客户端中运行脚本文件(注意文件名不需要引号
'
括起来):
比如脚本文件中的语句如下:SOURCE d:/sql.txt # 或采用 \. d:/sql.txt
运行结果如图:USE dbtest; SHOW TABLES; DESC books;
- 另一种方式是在启动mysql客户端时,采用
>
运算符直接指定脚本文件,脚本运行结束后,客户端将关闭。
运行结果如下图,但其输出排版上似乎少了一份从容优雅:mysql -u root -p > d:/sql.txt
这批量执行的功能简直是
Ctrl+C
工程师们的天堂!
- 在mysql客户端中运行脚本文件(注意文件名不需要引号
-
有了上一条脚本执行语句的启发,我想到了上一篇文章在讲为表格添加数据时,
没敢没能提到的功能:对一个表格一次性添加多条记录。但现在有了批量执行,我就可以先来一条INSERT INTO
语句:INSERT INTO tb_name VALUES (colVal1, colVal2, colVal3, ...);
然后疯狂
Ctrl+C/V
,再修改字段值,最后批量执行就可以了!这批量执行的功能简直是
Ctrl+C
工程师们的天堂! -
但是,先冷静一下,对于批量添加数据,官方其实有更简洁而优雅的做法:
LOAD DATA LOCAL INFILE 'd:/sqlData.txt' INTO TABLE tb_name LINES TERMINATED BY '\r' FIELDS TERMINATED BY '\t';
其中:
LOCAL
表明载入的是客户端主机上(而非服务器主机上)的文件;LINES TERMINATED BY '\n'
规定了换行符为\n
,Windows文档是\r\n
换行,而Linux是\n
换行,可按自己平台选择;FIELDS TERMINATED BY '\t'
规定了字段间采用Tab符号\t
分隔,可按照自己文档进行配置;\n
换行和\t
分隔是默认设置,也是效率最高的设置;- 如果字段为空,则需要使用
\N
指代NULL
,而不能直接空出; - 读取的记录将被添加到表格中,而不会将表格重置为文件中的记录;
- 更多信息参考官方文档LOAD-DATA;
但是遗憾地,一开始执行这个语句时,一般会碰到这样的问题:ERROR 3948(42000):载入本地数据被禁止;必须在客户端和服务器上同时启用该功能。
此处直接给出解决办法如下,具体信息可以参考官方文档LOAD-DATA-LOCAL-SECURITY。# 1. 设置服务器端local_infile变量为ON: SET GLOBAL local_infile=ON # 2. EXIT指令退出客户端 EXIT # 3. 在连接服务器时加上 --local-infile=1 参数: mysql -u root -p --local-infile=1
这下就可以成功载入啦:
2. 小结
- MySQL控制台有好几种光标,多数光标能够提示目前没能配对的运算符;
- 可以在连接mysqld服务器时直接指定使用的数据库;
- 可以使用
SOURCE
或是\.
语句来执行MySQL脚本,也可以在连接服务器时就指定脚本; - 可以使用
LOAD DATA LOCAL INFILE
语句将文档中的数据记录载入表格中,不过需要先开启local_infile功能;
如有错误欢迎指正,共同进步~
今天你学废了吗?