以下执行 SQL 的方式, 既可以在 终端直接执行, 也可以把命令写到 shell 脚本中执行.
测试环境:
mysql — The MySQL Command-Line Client
直接通过 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 可能比较麻烦, 可以利用 Here Document (一般约定俗称使用 EOF ) 来实现
mysql -u root -proot lanhai_user <<EOF
select FULLNAME_ from os_user limit 1;
EOF
同样, 也直接直接把以上语句写入到 shell 脚本文件中. 这里, 也是不能使用 --execute
命令选项.
输出结果
FULLNAME_
管理员
因为使用 --execute
会报错, 所以去掉了此选项, 输出结果也就不在格式化
根据 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_
管理员
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_ |
+-----------+
| 管理员 |
+-----------+