在 Shell 脚本中执行 SQL 语句

以下执行 SQL 的方式, 既可以在 终端直接执行, 也可以把命令写到 shell 脚本中执行.

测试环境:

  • Contos 7.9
  • MySQL 8.0

mysql — The MySQL Command-Line Client

短 SQL 命令执行

直接通过 mysql 命令执行 SQL, 也可以将此写入 shell 脚本中.

–execute=statement, -e statement

执行该语句并退出。默认的输出格式类似于使用 --batch 生成的输出格式。

使用 MySQL 客户端参数中的 --execute 可以直接在客户端执行 SQL 命令

mysql --user=root --password=root lanhai_user --execute "select FULLNAME_ from os_user limit 1;"

根据文档 --user=user_name, -u user_name--password[=password], -p[password] 可以看出, 用户名必须直接指出, 密码可以直接写出或者之后命令后输入. 使用 -u 时用户名和命令之间有空格, 使用 -p 直接写出密码时, 密码和命令之间没有空格

可以直接使用简写的命令

mysql -u root -proot lanhai_user -e "select FULLNAME_ from os_user limit 1;"

因为 execute 命令有退出功能, 所以不用在 SQL结尾写退出命令. 如果在 SQL 中第一句没有指定数据库, 则直接在命令行指定数据库名

输出结果

+-----------+
| FULLNAME_ |
+-----------+
| 管理员     |
+-----------+

因为使用了 --execute 所以输出格式做了优化

长 SQL 命令执行

如果 SQL 比较长, 直接在引号里写 SQL 可能比较麻烦, 可以利用 Here Document (一般约定俗称使用 EOF ) 来实现

mysql -u root -proot lanhai_user  <<EOF
select FULLNAME_ from os_user limit 1;
EOF

同样, 也直接直接把以上语句写入到 shell 脚本文件中. 这里, 也是不能使用 --execute 命令选项.

输出结果

FULLNAME_
管理员

因为使用 --execute 会报错, 所以去掉了此选项, 输出结果也就不在格式化

执行含有 SQL 的文件

根据 Executing SQL Statements from a Text File 文档介绍. 可以通过

mysql db_name < text_file

这种方式来执行 text_file 文件中的 SQL 语句, 如果在 text_file 文件的第一行指定了数据库, 可以直接使用以下语句执行

mysql < text_file

现在在 text_file 文件写入 SQL 语句

echo "select FULLNAME_ from os_user limit 1;" > text_file

或者

cat > text_file <<EOF
"select FULLNAME_ from os_user limit 1;"
EOF

如果文件内容太长, 先用 touch 创建文件后, 再写入内容.

直接执行下列语句

mysql -u root -proot lanhai_user < text_file

输出结果

FULLNAME_
管理员

登录 MySQL 客户端后执行含有 SQL 的文件

Executing SQL Statements from a Text File 文档还介绍了, 登录了 MySQL 客户端以后, 如何执行含有 SQL 的文件

如果您已经在运行 mysql 客户端,您可以使用 source 命令或 \.命令来执行含有 SQL 的文件:

mysql> source file_name
mysql> \. file_name

使用下列命令登录 MySQL 客户端

 mysql -u root -proot lanhai_user

同时指定了使用 lanhai_user 数据库

然后执行上面的 text_file 文件

mysql> source text_file

输出结果

+-----------+
| FULLNAME_ |
+-----------+
| 管理员     |
+-----------+

利用登录 MySQL 客户端后执行 SQL 文件这个特性, 我们可以直接不等了 客户端, 直接通过 source 执行含有 SQL 的文件

 mysql -u root -proot lanhai_user -e "source text_file"

这里必须加 -e 来指定 MySQL 的语句.

结果输出

+-----------+
| FULLNAME_ |
+-----------+
| 管理员     |
+-----------+
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐