在Linux环境下执行SQL脚本有多种方法,具体取决于所使用的数据库类型(如MySQL、PostgreSQL、Oracle等)。以下是几种常见的方式及其扩展说明:
1. 命令行直接执行
对于MySQL/MariaDB,可以使用`mysql`客户端工具:
bash
mysql -u 用户名 -p密码 数据库名 < 脚本文件.sql
如果需要显示执行过程,可添加`-v`参数。PostgreSQL则使用`psql`命令:
bash
psql -U 用户名 -d 数据库名 -f 脚本文件.sql
2. 交互式环境执行
进入数据库命令行后,用`source`命令(MySQL)或`\i`命令(PostgreSQL)加载脚本:
sql
mysql> source /路径/脚本文件.sql;
psql=> \i /路径/脚本文件.sql
3. 通过编程语言调用
使用Python的`sqlite3`或`pymysql`模块、PHP的PDO等,可在代码中读取SQL文件并批量执行。例如Python示例:
python
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test')
with open('script.sql', 'r') as f:
sql = f.read()
conn.cursor().execute(sql)
4. 定时任务执行
结合`crontab`实现定时任务,例如每天凌晨执行:
bash
0 0 * * * /usr/bin/mysql -u root -p密码 数据库名 < /脚本路径.sql
5. 批量处理多个脚本
使用Shell循环遍历SQL文件:
bash
for file in *.sql; do mysql -u root -p密码 数据库名 < "$file"; done
6. 注意事项
- 敏感信息(如密码)建议通过配置文件或环境变量传递,而非直接写在命令行。
- 复杂脚本需注意事务处理,可使用`BEGIN;`和`COMMIT;`包裹语句。
- 执行前建议备份数据库,特别是DDL或数据变更操作。
7. 性能优化
- 大体积SQL文件可通过`mysqlimport`或`COPY`命令(PostgreSQL)导入CSV数据。
- 启用批量插入(如MySQL的`INSERT INTO ... VALUES (...), (...);`句式)提升效率。
对于Oracle数据库,需通过`sqlplus`执行:
bash
sqlplus 用户名/密码@服务名 @脚本文件.sql
特殊场景下,可能还需要设置环境变量如`NLS_LANG`以确保字符集正确。