在 Linux 系统中,如果你想要执行 MySQL 存储过程,通常可以通过以下几种方式来实现:
✅ 1. 使用 mysql 命令行工具执行存储过程
基本语法:
mysql -u username -p -h hostname -P port database_name -e "CALL procedure_name(参数列表);"
示例:
mysql -u root -p -h 127.0.0.1 -P 3306 mydb -e "CALL myproc(1, 'test');"
参数说明:
-u username:MySQL 用户名-p:提示输入密码-h hostname:MySQL 服务器地址(默认127.0.0.1)-P port:MySQL 服务器端口(默认3306)-e "...":执行 SQL 语句CALL procedure_name(...):调用存储过程
✅ 2. 使用 mysql 的 --batch 选项(适用于脚本)
如果你希望在脚本中执行存储过程,可以使用 --batch 选项:
mysql -u root -p -h 127.0.0.1 -P 3306 mydb --batch -e "CALL myproc(1, 'test');"
✅ 3. 使用 mysql 的 --execute 选项(适用于脚本)
mysql -u root -p -h 127.0.0.1 -P 3306 mydb --execute="CALL myproc(1, 'test');"
✅ 4. 使用 sh 或 bash 执行存储过程(适用于脚本)
sh -c "mysql -u root -p -h 127.0.0.1 -P 3306 mydb -e 'CALL myproc(1, 'test');'"
✅ 5. 使用 mysql 的 --verbose 选项(调试用)
mysql -u root -p -h 127.0.0.1 -P 3306 mydb --verbose -e "CALL myproc(1, 'test');"
✅ 6. 使用 mysql 的 --connect 选项(连接到远程数据库)
mysql -u root -p -h remote-host -P 3306 mydb --connect -e "CALL myproc(1, 'test');"
✅ 7. 使用 mysql 的 --compress 选项(用于加密连接)
mysql -u root -p -h 127.0.0.1 -P 3306 mydb --compress -e "CALL myproc(1, 'test');"
✅ 8. 使用 mysql 的 --no-auto-reconnect 选项(用于解决连接问题)
mysql -u root -p -h 127.0.0.1 -P 3306 mydb --no-auto-reconnect -e "CALL myproc(1, 'test');"
✅ 9. 使用 mysql 的 --user 选项(指定用户)
mysql -u root -p -h 127.0.0.1 -P 3306 mydb --user=root -e "CALL myproc(1, 'test');"
✅ 10. 使用 mysql 的 --ssl 选项(加密连接)
mysql -u root -p -h 127.0.0.1 -P 3306 mydb --ssl -e "CALL myproc(1, 'test');"
✅ 小结
| 方式 | 适用场景 | 优点 |
|---|---|---|
mysql -e "..." |
直接执行 SQL 命令 | 简单易用 |
--batch |
脚本中执行 | 适合脚本调用 |
--execute |
脚本中执行 | 适合脚本调用 |
sh -c |
脚本中执行 | 适合脚本调用 |
--no-auto-reconnect |
解决连接问题 | 适合连接不稳定的情况 |
✅ 常见问题
-
如何查看存储过程?
mysql -u root -p -h 127.0.0.1 -P 3306 mydb -e "SHOW PROCEDURE STATUS;" -
如何查看存储过程的定义?
mysql -u root -p -h 127.0.0.1 -P 3306 mydb -e "SHOW CREATE PROCEDURE myproc;"
如需进一步帮助,比如如何编写存储过程或脚本调用存储过程,请告诉我你的具体需求!
