news 2026/7/13 2:53:34

HoRain云--MySQL与Oracle语法核心差异详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--MySQL与Oracle语法核心差异详解

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

MySQL 与 Oracle 语法核心区别详解

一、基础查询差异

1. FROM子句要求

2. 分页查询实现

二、数据类型差异

1. 字符串类型

2. 数值类型

3. 日期类型

三、自增主键实现

四、字符串与日期函数

1. 字符串函数

2. 日期函数

五、高级语法支持

1. 递归查询

2. 公共表表达式(CTE)

六、DML语句差异

1. 删除语句

2. 更新语句

七、其他重要差异

1. 字符串拼接

2. 事务控制

3. 空值处理

八、迁移注意事项


MySQL 与 Oracle 语法核心区别详解

一、基础查询差异

1. FROM子句要求

-- Oracle:必须包含FROM子句,无表时需用虚拟表 SELECT SYSDATE FROM DUAL; -- MySQL:允许省略FROM直接查询 SELECT NOW();

2. 分页查询实现

-- Oracle:使用ROWNUM伪列,需嵌套子查询 SELECT * FROM ( SELECT t.*, ROWNUM rn FROM ( SELECT * FROM employees ORDER BY id ) t WHERE ROWNUM <= 20 ) WHERE rn > 10; -- MySQL:直接通过LIMIT简化分页 SELECT * FROM employees ORDER BY id LIMIT 10, 10; -- 跳过10条,取10条

二、数据类型差异

1. 字符串类型

-- Oracle VARCHAR2(4000) -- 变长字符串,最大4000字节(12c后可扩展至32767) CHAR(2000) -- 定长字符串,最大2000字节 -- 注意:Oracle不区分NULL和空字符串,空字符串会被转换为NULL -- MySQL VARCHAR(65535) -- 变长字符串,最大65535字节 CHAR(255) -- 定长字符串,最大255字节 -- 注意:MySQL区分NULL和空字符串

2. 数值类型

-- Oracle NUMBER(10,2) -- 总共10位,小数点后2位 -- MySQL DECIMAL(10,2) -- 等同于Oracle的NUMBER INT -- 整数类型

3. 日期类型

-- Oracle DATE -- 包含日期和时间 TIMESTAMP -- 包含日期、时间和时区 -- MySQL DATE -- 仅包含日期(YYYY-MM-DD) DATETIME -- 包含日期和时间(YYYY-MM-DD HH:MM:SS) TIMESTAMP -- 包含日期和时间,范围较小

三、自增主键实现

-- MySQL:通过AUTO_INCREMENT自动管理 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); -- Oracle:需手动创建序列实现自增 CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1; CREATE TABLE users ( id NUMBER PRIMARY KEY, name VARCHAR2(50) ); -- 插入数据时使用序列 INSERT INTO users VALUES (user_seq.NEXTVAL, 'John');

四、字符串与日期函数

1. 字符串函数

-- 获取字符串长度 -- Oracle SELECT LENGTH('Hello') FROM DUAL; -- 返回5 -- MySQL SELECT CHAR_LENGTH('Hello'); -- 返回5 -- 查找子串位置(注意参数顺序相反) -- Oracle SELECT INSTR('Hello World', 'World') FROM DUAL; -- 返回7 -- MySQL SELECT LOCATE('World', 'Hello World'); -- 返回7

2. 日期函数

-- 获取当前时间 -- Oracle SELECT SYSDATE FROM DUAL; SELECT SYSTIMESTAMP FROM DUAL; -- MySQL SELECT NOW(); SELECT CURRENT_TIMESTAMP; -- 日期格式化 -- Oracle SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; -- MySQL SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

五、高级语法支持

1. 递归查询

-- Oracle:提供专门的START WITH ... CONNECT BY PRIOR语法 SELECT employee_id, manager_id, LEVEL FROM employees START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id; -- MySQL:8.0+版本支持WITH RECURSIVE WITH RECURSIVE employee_hierarchy AS ( SELECT employee_id, manager_id, 1 AS level FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.employee_id, e.manager_id, eh.level + 1 FROM employees e INNER JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id ) SELECT * FROM employee_hierarchy;

2. 公共表表达式(CTE)

-- Oracle:支持WITH语法 WITH dept_avg AS ( SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id ) SELECT e.name, e.salary, d.avg_sal FROM employees e JOIN dept_avg d ON e.department_id = d.department_id; -- MySQL:8.0+版本支持WITH RECURSIVE WITH dept_avg AS ( SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id ) SELECT e.name, e.salary, d.avg_sal FROM employees e JOIN dept_avg d ON e.department_id = d.department_id;

六、DML语句差异

1. 删除语句

-- Oracle:两种格式都合法,可以使用别名 DELETE FROM table_name; DELETE table_name; DELETE FROM table_name t WHERE t.id = 1; -- MySQL:必须使用DELETE FROM格式,不能直接在DELETE后使用别名 DELETE FROM table_name; DELETE FROM table_name WHERE id = 1; -- 不能写成:DELETE table_name t WHERE t.id = 1;

2. 更新语句

-- Oracle:支持在UPDATE中使用子查询 UPDATE employees e SET salary = (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id) WHERE department_id = 10; -- MySQL:语法类似,但有一些限制 UPDATE employees e JOIN (SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id) d ON e.department_id = d.department_id SET e.salary = d.avg_sal WHERE e.department_id = 10;

七、其他重要差异

1. 字符串拼接

-- Oracle:使用||操作符 SELECT 'Hello' || ' ' || 'World' FROM DUAL; -- MySQL:使用CONCAT函数或||(需设置PIPES_AS_CONCAT) SELECT CONCAT('Hello', ' ', 'World'); -- 或设置:SET sql_mode='PIPES_AS_CONCAT'; -- 然后:SELECT 'Hello' || ' ' || 'World';

2. 事务控制

-- Oracle:默认开启事务,需要显式COMMIT UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; COMMIT; -- 或 ROLLBACK; -- MySQL:取决于存储引擎,InnoDB支持事务 -- 默认自动提交,可通过设置关闭 SET autocommit = 0; UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; COMMIT; -- 或 ROLLBACK;

3. 空值处理

-- Oracle:空字符串会被转换为NULL INSERT INTO test_table (name) VALUES (''); -- 实际存储为NULL -- MySQL:区分空字符串和NULL INSERT INTO test_table (name) VALUES (''); -- 存储为空字符串 INSERT INTO test_table (name) VALUES (NULL); -- 存储为NULL

八、迁移注意事项

  1. 数据类型映射:迁移时注意类型转换,如Oracle的NUMBER对应MySQL的DECIMAL
  2. 日期处理:Oracle的DATE包含时间,MySQL的DATE仅包含日期
  3. 分页查询:重写分页逻辑,从ROWNUM改为LIMIT
  4. 自增主键:将序列逻辑改为AUTO_INCREMENT
  5. 字符串函数:替换LENGTH为CHAR_LENGTH,INSTR为LOCATE等
  6. 空值处理:注意Oracle中空字符串与NULL的等价性

掌握这些核心差异,可以有效避免在跨数据库开发和迁移过程中遇到的常见问题,提高开发效率和代码质量。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 21:36:40

SEW变频器MCF40A0750-503-4-0T 08274398

SEW 变频器 MCF40A0750-503-4-0T 08274398 详细介绍 1. 概述与产品定位 SEW MCF40A0750-503-4-0T (序列号 08274398) 是 SEW-EURODRIVE 公司生产的 MOVIFLEX MCF40A 系列 中的一款通用型变频器。MOVIFLEX 是 SEW 旗下的变频器品牌&#xff0c;以其高性能、可靠性和灵活性在工…

作者头像 李华
网站建设 2026/7/12 20:53:45

SXW-300微机控制钢绞线松弛试验机

SXW-300微机控制钢绞线松弛试验机一、产品简介SXW-300微机控制钢绞线松弛试验机在设计过程中&#xff0c;吸收了德国、意大利等著名松弛试验机公司的设计理念和结构特点&#xff0c;并依据钢绞线松弛试验的相关国家标准研制而成的&#xff0c;专用于钢绞线、镀锌钢丝及螺纹钢筋…

作者头像 李华
网站建设 2026/7/4 18:43:29

告别内卷!2026 程序员转行方向推荐:高薪赛道 + 技能提升手册

对于程序员转行方向的推荐&#xff0c;可以基于当前的技术趋势、市场需求以及程序员的个人技能和兴趣来综合考虑。以下是一些推荐的转行方向&#xff1a; 伴随着社会的发展&#xff0c;网络安全被列为国家安全战略的一部分&#xff0c;因此越来越多的行业开始迫切需要网安人员&…

作者头像 李华
网站建设 2026/7/4 12:57:43

最新2025年政府产业引导基金数据

最新2025年政府产业引导基金数据 数据一共七万多条 包括以下字段信息&#xff1a;所属省 所属市 被投资企业 政府机关 政府机关持股投资机构的比例 政府机关持股投资机构的路径 基金简称 基金代码 负责人类型 负责人名称 投资机构 投资机构持股投资企业的比例 完整图谱 所属省…

作者头像 李华
网站建设 2026/7/1 20:42:42

【小程序毕设全套源码+文档】基于springboot+协同过滤算法的音乐推荐系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华