怎样在命令行中执行SQL脚本?

wen IT资讯 241

本文目录导读:

怎样在命令行中执行SQL脚本?

  1. 通用核心思路
  2. MySQL / MariaDB
  3. PostgreSQL
  4. SQLite
  5. SQL Server
  6. Oracle
  7. 常见问题与注意事项
  8. 总结命令速查表

在命令行中执行 SQL 脚本,最常用的方法是使用相应数据库的命令行客户端工具,以下是针对主流数据库(MySQL、PostgreSQL、SQLite、SQL Server、Oracle)的具体操作步骤。

通用核心思路

命令行工具 + 连接参数 + 脚本文件路径


MySQL / MariaDB

使用 mysql 命令。

基本语法:

mysql -u 用户名 -p 数据库名 < /路径/脚本.sql

具体步骤:

  1. 打开终端(Linux/macOS)或命令提示符(Windows)。
  2. 执行命令:
    mysql -u root -p my_database < /home/user/init.sql
    • -u root:指定用户为 root。
    • -p:提示输入密码。
    • my_database:要执行脚本的数据库(如果脚本内包含 USE database_name;,此处可省略)。
    • < /home/user/init.sql:将文件内容作为输入重定向给 mysql。
  3. 按提示输入密码,脚本将开始执行。

其他常用方式:

  • 直接指定密码(不安全,仅建议测试用):
    mysql -u root -pYourPassword my_database < script.sql
  • 从命令行内部执行:
    1. 先登录:mysql -u root -p
    2. 选择数据库:USE my_database;
    3. 执行脚本:SOURCE /path/to/script.sql;

PostgreSQL

使用 psql 命令。

基本语法:

psql -U 用户名 -d 数据库名 -f /路径/脚本.sql

具体步骤:

  1. 确保已安装 psql(通常随 PostgreSQL 安装)。
  2. 执行命令:
    psql -U postgres -d my_database -f /home/user/init.sql
    • -U postgres:指定用户。
    • -d my_database:指定数据库。
    • -f /path/to/script.sql:指定要执行的脚本文件。
  3. 系统提示输入密码(默认 postgres 用户可能有密码)。

其他方式:

  • 从 psql 交互界面:
    \i /path/to/script.sql

SQLite

SQLite 使用 sqlite3 命令。

基本语法:

sqlite3 数据库文件.db < /路径/脚本.sql

或者:

sqlite3 数据库文件.db ".read /路径/脚本.sql"

具体步骤:

  1. 执行命令:
    sqlite3 my_database.db < /home/user/init.sql
    • my_database.db:指定数据库文件(如果不存在会自动创建)。
    • < /path/to/script.sql:输入重定向。
  2. 无需认证,直接执行。

SQL Server

使用 sqlcmd 工具(需要安装 SQL Server Command Line Tools)。

基本语法:

sqlcmd -S 服务器地址 -U 用户名 -P 密码 -d 数据库名 -i /路径/脚本.sql

具体步骤(Windows 或 Linux/macOS):

  1. 执行命令:
    sqlcmd -S localhost -U sa -P YourPassword -d my_database -i /home/user/init.sql
    • -S localhost:指定服务器实例(本地为 localhost,远程为 IP,端口)。
    • -U sa:用户名。
    • -P YourPassword:密码。
    • -d my_database:指定数据库。
    • -i /path/to/script.sql:指定输入脚本文件。

安全方式(Windows 身份验证):

sqlcmd -S localhost -E -d my_database -i "C:\script.sql"

-E 表示使用 Windows 集成安全)


Oracle

使用 sqlplus 命令。

基本语法:

sqlplus 用户名/密码@数据库服务 < /路径/脚本.sql

具体步骤:

sqlplus scott/tiger@orcl < /home/user/init.sql
  • scott/tiger:用户名/密码。
  • @orcl:Oracle 服务名(TNS 条目)。
  • < /path/to/script.sql:输入重定向。

更好的方式(避免密码在命令中暴露):

sqlplus /nolog
SQL> connect scott/tiger@orcl
SQL> @/path/to/script.sql

或者使用单行命令:

sqlplus scott@orcl @/path/to/script.sql

(这种方式会提示输入密码,相对安全)


常见问题与注意事项

  1. 错误:命令找不到
    确认已安装该数据库的 CLI 工具(如 mysql, psql, sqlcmd)并将其路径添加到系统 PATH 环境变量。

  2. 编码/字符集问题

    • MySQL:在命令后加 --default-character-set=utf8
      mysql -u root -p my_db --default-character-set=utf8 < script.sql
    • PostgreSQL:设置 PGCLIENTENCODING 环境变量:
      export PGCLIENTENCODING=UTF-8(Unix)或 set PGCLIENTENCODING=UTF-8(Windows)
  3. 文件路径中的空格
    使用引号包裹路径,"C:\My Scripts\init.sql"

  4. 脚本中包含 USE\c 等切换数据库命令
    确保目标数据库存在,否则可能出现 “Unknown database” 错误。

  5. 输出重定向(保存执行结果)

    mysql -u root -p my_db < script.sql > output.txt 2>&1

    将标准输出和错误输出都保存到 output.txt 文件中。

总结命令速查表

数据库 命令
MySQL mysql -u user -p db < file.sql
PostgreSQL psql -U user -d db -f file.sql
SQLite sqlite3 db_file.db < file.sqlsqlite3 db_file.db ".read file.sql"
SQL Server sqlcmd -S server -U user -P pass -d db -i file.sql
Oracle sqlplus user/pass@service < file.sql

根据你实际使用的数据库选择对应命令即可,如果还有具体的报错信息,欢迎提供,我可以帮你进一步诊断。

抱歉,评论功能暂时关闭!