命令行的一些用法
# 270.命令行的一些用法
# 清屏
如果使用命令行操作数据库,随着时间的推移,屏幕上会出现很多结果;此时可以用清屏指令使得屏幕变干净:
mysql> system cls
效果:干干净净
# 使用列的方式展示
如果一行的数据太多,在命令行会显示换行的情况,看起来很不直观。此时可以使用\G参数,表示按列查看:
mysql> select * from Product \G
*************************** 1. row ***************************
product_id: 0001
product_name: T恤衫
product_type: 衣服
sale_price: 1000
purchase_price: 500
regist_date: 2009-09-20
*************************** 2. row ***************************
product_id: 0002
product_name: 打孔器
product_type: 办公用品
sale_price: 500
purchase_price: 320
regist_date: 2009-09-11
............................
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
说明:
- 使用\G后,结尾不用加分号(;)也行
- 由于数据太多,这里只将前2行的数据贴出来
# SQL语句中的分号
在写SQL语句时,如果没有出现分号,那么即使回车也不会执行,因为MySQL的控制台认定只有出现分号的时候,才是一条完整的语句,所以在使用MySQL时一条语句可以分成多行输入。
如果要在命令行里执行多行SQL,这样就更更美观一点
mysql> select *
-> from Product
-> where product_type = '衣服'
-> ;
2
3
4
# 预读
-A:使用该参数时,不预读数据库信息。
默认情况下,切换数据库后就会预读数据库中的表信息。当数据库很大或者表数量很多时,切换数据库会比较慢。参考如下提示:
mysql> use LearnSQL
Reading table information for completion of table and column names. You can turn off this feature to get a quicker startup with -A
Database changed
2
3
4
用法:在登录时加上该参数
mysql -uroot -p -A
# 执行外部文件
我们可以将一个SQL保存到文本文件中(注意文件后缀改为.sql)。例如,新建D:\test.sql,内容如下:
use shop;
select * from Product;
2
如果想要在命令行里执行该文件内的SQL,有两种方法:
- source命令
- mysql命令
方法1:在MySQL里,执行source命令:
-- 语法:
source sql脚本文件路径全名
-- 例如:
mysql> source D:\test.sql
Database changed
+------------+--------------+--------------+------------+----------------+-------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
+------------+--------------+--------------+------------+----------------+-------------+
| 0001 | T恤衫 | 衣服 | 1000 | 500 | 2009-09-20 |
| 0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-09-11 |
| 0003 | 运动T恤 | 衣服 | 4000 | 2800 | NULL |
| 0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2009-09-20 |
| 0005 | 高压锅 | 厨房用具 | 6800 | 5000 | 2009-01-15 |
| 0006 | 叉子 | 厨房用具 | 500 | NULL | 2009-09-20 |
| 0007 | 擦菜板 | 厨房用具 | 880 | 790 | 2008-04-28 |
| 0008 | 圆珠笔 | 办公用品 | 100 | NULL | 2009-11-11 |
+------------+--------------+--------------+------------+----------------+-------------+
8 rows in set (0.00 sec)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
方法2:使用mysql命令。平时我们都是用mysql -uroot的方式来登录数据库,其实也传递一个文件给该命令,让其执行文件内的SQL:
-- 语法:
mysql -u <username> -p <password> -h <host> -P <port> <database> < <sql_file>
2
参数说明:
<username>
: 数据库用户名<password>
: 数据库密码<host>
: 数据库主机地址<port>
: 数据库端口号<database>
: 数据库名称<sql_file>
: SQL文件的路径
例如:
-- :
mysql -uroot -p shop < D:\test.sql
2
注意:必须指定数据库,如果在命令行里有指定数据库,则文件内可以省略;反之如果文件内指定了,则命令行里可以省略。
除了命令行,一般MySQL的图形化工具也能导入和执行SQL文件。
# 查看warning
在执行SQL的过程中,有时候会有一些警告,此时可以用show warnings;
来查看警告信息
比如,创建表时,给整数类型加个显示宽度的属性(后续我们讲数据类型时会介绍该属性):
CREATE TABLE temp (
id int(4)
);
2
3
从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性,后续的版本可能会删除该属性,因此我们创建该表的时候,会有个警告:
-- 结果:
Query OK, 0 rows affected, 1 warning (0.01 sec)
-- 如果是正常的情况,是没有警告的,例如:
Query OK, 0 rows affected (0.00 sec)
2
3
4
5
6
此时我们就可以用show warnings;
来查看警告了:
mysql> show warnings;
+---------+------+-----------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------------------------+
| Warning | 1681 | Integer display width is deprecated and will be removed in a future release. |
+---------+------+-----------------------------------------------------------------------+
1 row in set (0.00 sec)
2
3
4
5
6
7
如果嫌这样看warnings有点麻烦,可以在连接数据库的选项中加上--show-warnings,直接将显示warnings。效果:
mysql -uroot -p --show-warnings
mysql> use shop;
mysql> CREATE TABLE temp (
-> id int(4)
-> );
Query OK, 0 rows affected, 1 warning (0.02 sec)
Warning (Code 1681): Integer display width is deprecated and will be removed in a future release.
2
3
4
5
6
7
8
9
10
注意:
- 如果在执行完一个SQL后,有warning;但是后续又执行了第二条SQL,那么第一条SQL的warning信息就看不到了。
- 如果是使用可视化工具,一般都会直接显示警告信息
# 记录执行记录
有时候我们会在MySQL命令行里执行很多很多的内容,但当内容多了以后,不方便查看;此外如果不小心关闭了终端,那么之前的执行记录都会不见。
在mysql内执行 tee 日志文件名
,该命令就会将执行记录,保存到该文件内。
使用 tee 日志文件名的效果:
mysql> tee d:\import.log
打开D盘的日志文件import.log,内容如下:
mysql> tee import.log
Logging to file 'import.log'
mysql>
mysql> use ssm;
Database changed
mysql> show tables;
+---------------+
| Tables_in_ssm |
+---------------+
| account |
| temp |
+---------------+
2 rows in set (0.01 sec)
2
3
4
5
6
7
8
9
10
11
12
13
14