SQLPlus 与 MySQL 在 Linux 上的区别
核心差异概览
- 定位不同:SQL*Plus 是 Oracle 数据库的官方命令行客户端,用于执行 SQL 与 PL/SQL;mysql 是 MySQL 服务器自带的命令行客户端,用于执行 SQL(不含 PL/SQL)。两者面向的数据库内核完全不同。
- 安装与依赖:SQL*Plus 通常随 Oracle Instant Client/数据库客户端 安装,使用前需配置 ORACLE_HOME、PATH、LD_LIBRARY_PATH 等环境变量;mysql 客户端随 MySQL 客户端包提供,Linux 上可直接通过包管理器安装并连接本地或远程 MySQL 实例。
- 连接串与默认端口:SQL*Plus 常用格式为 sqlplus user/pass@//host:1521/service 或 @TNSNAME;mysql 常用格式为 mysql -h host -P 3306 -u user -p。Oracle 默认端口 1521,MySQL 默认端口 3306。
- 交互与脚本特性:SQL*Plus 提供丰富的报表与格式化命令(如 SPOOL、SET LINESIZE/PAGESIZE、COLSEP),适合批处理与导出;mysql 客户端支持 source 脚本.sql、DELIMITER 等,便于执行与分隔存储过程/触发器语句。
- SQL 与功能差异:Oracle 使用 PL/SQL,MySQL 使用 SQL/PSM;在类型系统、分页语法、空值函数等方面差异显著(如 Oracle 的 VARCHAR2/NUMBER、ROWNUM 分页、NVL;MySQL 的 VARCHAR/INT、LIMIT、IFNULL)。
对比维度一览
| 维度 |
SQL*Plus |
mysql 客户端 |
| 工具定位 |
Oracle 官方命令行客户端,支持 SQL 与 PL/SQL |
MySQL 自带命令行客户端,支持 SQL(不含 PL/SQL) |
| 适用数据库 |
Oracle Database |
MySQL Server |
| 安装与配置 |
需安装 Oracle Instant Client/客户端;配置 ORACLE_HOME、PATH、LD_LIBRARY_PATH |
安装 MySQL 客户端包即可;命令行直连 |
| 连接与端口 |
sqlplus user/pass@//host:1521/service 或 @TNSNAME;默认端口 1521 |
mysql -h host -P 3306 -u user -p;默认端口 3306 |
| 脚本执行 |
@script.sql |
source script.sql |
| 输出与导出 |
SPOOL 到文件,配合 SET 格式化,适合报表/CSV 导出 |
命令行重定向或客户端导出工具(如 mysqldump) |
| 常用命令 |
DESCRIBE(简写 DESC)、SHOW USER、变量/格式化命令 |
SHOW DATABASES/TABLES/COLUMNS、USE db、DELIMITER |
| 典型 SQL 差异 |
需要 FROM DUAL 的标量查询;ROWNUM 分页;NVL;VARCHAR2/NUMBER |
无需 FROM DUAL;LIMIT 分页;IFNULL;VARCHAR/INT |
| 大小写敏感 |
对象名默认不区分大小写 |
库/表名是否区分大小写取决于 操作系统与 lower_case_table_names 设置 |
注:表中命令与语法示例基于 Linux 环境的常见用法。
常见用法示例
- SQL*Plus 连接与导出
- 连接:sqlplus scott/tiger@//dbhost.example.com:1521/orcl
- 执行脚本:sqlplus scott/tiger@orcl @/path/script.sql
- 导出 CSV:
- SET COLSEP ‘,’
- SET LINESIZE 200
- SET PAGESIZE 50000
- SET FEEDBACK OFF
- SET HEADING ON
- SPOOL /tmp/out.csv
- SELECT * FROM emp;
- SPOOL OFF
- mysql 客户端连接与执行
- 连接:mysql -h 127.0.0.1 -P 3306 -u root -p
- 执行脚本:mysql -u root -p mydb < /path/script.sql
- 交互内执行脚本:source /path/script.sql
- 修改语句分隔符(存储过程/触发器):DELIMITER $$ … END$$ DELIMITER ;
如何选择
- 目标是 Oracle 数据库的日常维护、批处理与报表导出:优先使用 SQL*Plus(配合 SPOOL 与格式化命令)。
- 目标是 MySQL 数据库:使用 mysql 客户端(配合 source、DELIMITER 等),需要导出/备份时结合 mysqldump 等工具。