news 2026/4/23 14:22:51

MySQL 5.7 转 Oracle 实习生核心注意事项(企业常见场景)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 5.7 转 Oracle 实习生核心注意事项(企业常见场景)

作为从 MySQL 转 Oracle 的实习生,核心难点是语法差异、函数差异、规范差异,以下是企业开发中高频遇到的问题和注意事项,按优先级排序。

(一) 基础语法与数据类型差异(最易踩坑)

  1. 字符串连接符不同

    • MySQL:支持CONCAT()函数或||(部分版本需配置),更常用CONCAT()
    • Oracle:不支持CONCAT()多参数拼接(仅支持 2 个参数),主流使用||作为字符串连接符,多参数拼接需嵌套CONCAT()或用||串联。

    sql

    -- MySQL 写法 SELECT CONCAT('姓名:', emp_name, ',部门:', dept_name) FROM emp; -- Oracle 写法(二选一) SELECT '姓名:' || emp_name || ',部门:' || dept_name FROM emp; -- 推荐,简洁 SELECT CONCAT(CONCAT('姓名:', emp_name), ',部门:', dept_name) FROM emp; -- 仅支持 2 个参数,嵌套麻烦
  2. 数据类型对应与注意点

    • 整数类型:MySQL 的INT对应 Oracle 的NUMBER(10),MySQL 的BIGINT对应 Oracle 的NUMBER(19),Oracle 无INT/BIGINT原生类型(虽可兼容书写,但本质是NUMBER)。
    • 字符串类型:MySQL 的VARCHAR对应 Oracle 的VARCHAR2Oracle 不推荐使用VARCHAR,优先用VARCHAR2,两者目前功能一致,但后续版本可能差异化);MySQL 的TEXT对应 Oracle 的CLOB(大文本)。
    • 日期类型:MySQL 的DATETIME对应 Oracle 的DATE(Oracle 的DATE包含年月日时分秒,与 MySQL 不同),Oracle 还有TIMESTAMP(更高精度,支持毫秒),无DATETIME类型。
  3. 分页语法差异(企业查询高频场景)

    • MySQL:使用LIMIT 起始行, 每页条数,简洁直观。
    • Oracle:无LIMIT关键字,企业常用两种分页方式,实习生优先掌握ROWNUM嵌套分页(兼容所有版本)。

    sql

    -- MySQL 分页:查询第 11-20 条数据(每页 10 条,第 2 页) SELECT * FROM emp ORDER BY emp_id LIMIT 10, 10; -- Oracle 分页(ROWNUM 嵌套,推荐):查询第 11-20 条数据 SELECT t.* FROM ( SELECT e.*, ROWNUM rn FROM emp e ORDER BY emp_id -- 内层查询生成行号 ) t WHERE t.rn BETWEEN 11 AND 20; -- 外层查询筛选行号范围
  4. 注释语法差异(规范问题)

    • 单行注释:两者都支持-- 注释内容(注意 Oracle 中--后必须加空格,否则报错,MySQL 无此要求)。
    • 多行注释:两者都支持/* 注释内容 */,无差异。
    • 额外:Oracle 支持REM注释(仅用于脚本文件,终端执行有效,不推荐在业务 SQL 中使用)。

(二) 函数差异(企业开发高频使用)

  1. 日期函数(核心差异,极易踩坑)

    • 获取当前时间:
      • MySQL:NOW()(获取当前年月日时分秒)、CURDATE()(仅年月日)。
      • Oracle:SYSDATE(无括号!获取当前年月日时分秒,最常用)、SYSTIMESTAMP(高精度,含毫秒)。
    • 日期格式化:
      • MySQL:DATE_FORMAT(日期字段, '格式字符串')
      • Oracle:TO_CHAR(日期字段, '格式字符串')(格式化日期为字符串)、TO_DATE(字符串, '格式字符串')(格式化字符串为日期,必须指定格式,否则报错)。

    sql

    -- MySQL:格式化当前时间为 '2026-02-04 15:30:00' SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- Oracle:格式化当前时间为 '2026-02-04 15:30:00' SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; -- HH24 表示 24 小时制,HH 是 12 小时制 -- Oracle:字符串转日期(必须指定格式,与字符串格式匹配) SELECT TO_DATE('2026-02-04', 'YYYY-MM-DD') FROM DUAL;
    • 日期加减:
      • MySQL:DATE_ADD(日期, INTERVAL 1 DAY)(加 1 天)。
      • Oracle:直接加减数字(单位为天),SYSDATE + 1(加 1 天)、SYSDATE - 0.5(减 12 小时),如需按月 / 年加减,使用ADD_MONTHS(日期, 1)(加 1 个月)。
  2. 空值处理函数

    • MySQL:IFNULL(字段, 默认值)(字段为空则返回默认值)。
    • Oracle:NVL(字段, 默认值)(对应 MySQL 的IFNULL,最常用)、NVL2(字段, 非空返回值, 空返回值)(扩展功能,企业偶尔使用)。

    sql

    -- MySQL:员工奖金为空则返回 0 SELECT emp_name, IFNULL(bonus, 0) FROM emp; -- Oracle:员工奖金为空则返回 0 SELECT emp_name, NVL(bonus, 0) FROM emp;
  3. 聚合函数与分组查询(规范差异)

    • 核心差异:Oracle 的GROUP BY子句中,必须包含所有非聚合函数的查询字段,MySQL (5.7 若关闭only_full_group_by配置)允许非聚合字段不出现在GROUP BY中,这是企业开发中实习生最易报错的点之一。

    sql

    -- MySQL (关闭 only_full_group_by):可正常执行 SELECT dept_id, emp_name, SUM(salary) FROM emp GROUP BY dept_id; -- Oracle:报错(emp_name 是非聚合字段,未出现在 GROUP BY 中) SELECT dept_id, emp_name, SUM(salary) FROM emp GROUP BY dept_id; -- Oracle:正确写法(非聚合字段 emp_name 加入 GROUP BY,或去掉 emp_name) SELECT dept_id, SUM(salary) FROM emp GROUP BY dept_id; -- 推荐,符合业务需求

(三) 企业开发规范与常见问题(实习生必备)

  1. 必须使用FROM DUAL表(无表查询时)Oracle 要求所有SELECT语句必须包含FROM子句,若查询无具体数据表(如格式化当前时间、计算常量),必须使用系统内置的DUAL虚表,MySQL 无此要求。

    sql

    -- MySQL:无表查询,正常执行 SELECT NOW(); -- Oracle:无表查询,必须加 FROM DUAL SELECT SYSDATE FROM DUAL;
  2. 大小写敏感问题(规范要求)

    • Oracle:字段名、表名若不使用双引号包裹,默认不区分大小写(存储为大写);字符串查询区分大小写(与 MySQL 不同,MySQL 默认不区分)。
    • 企业规范:实习生开发时,表名、字段名统一使用大写(或小写,保持一致),字符串查询若需不区分大小写,使用UPPER()(转大写)或LOWER()(转小写)函数。

    sql

    -- Oracle:查询姓名为 "zhangsan",若数据库中存储为 "ZhangSan",直接查询无结果 SELECT * FROM emp WHERE emp_name = 'zhangsan'; -- Oracle:不区分大小写查询(推荐,企业常用) SELECT * FROM emp WHERE UPPER(emp_name) = UPPER('zhangsan');
  3. 事务处理差异

    • MySQL:默认事务隔离级别为REPEATABLE READ,支持AUTOCOMMIT=1(自动提交事务,执行INSERT/UPDATE/DELETE后立即生效)。
    • Oracle:默认事务隔离级别为READ COMMITTED默认AUTOCOMMIT=0(不自动提交事务),执行INSERT/UPDATE/DELETE后,必须手动执行COMMIT(提交事务)或ROLLBACK(回滚事务),否则数据仅在当前会话可见,关闭会话后数据丢失,这是实习生最易犯的 “数据插入后看不到” 的问题。
  4. 序列(Sequence)替代自增主键(企业核心)

    • MySQL:支持AUTO_INCREMENT关键字,直接设置字段为自增主键。
    • Oracle:AUTO_INCREMENT关键字,企业中通过「序列(Sequence)+ 触发器(Trigger)」实现自增主键,实习生需了解序列的基本使用(无需手动创建,只需调用序列获取自增值)。

    sql

    -- Oracle:调用序列获取下一个自增值(企业中序列名通常为 表名_SEQ) SELECT emp_seq.NEXTVAL FROM DUAL; -- 获取下一个值 SELECT emp_seq.CURRVAL FROM DUAL; -- 获取当前值(需先调用过 NEXTVAL)
  5. 常见报错与快速排查(实习生必记)

    • ORA-00942: 表或视图不存在:① 表名 / 字段名拼写错误;② 无该表的查询权限(联系 DBA 授权);③ 未指定表空间(企业表通常归属具体用户,需加用户前缀,如SCOTT.EMP)。
    • ORA-01722: 无效数字:① 字符串字段与数字类型进行运算;② 字符串转数字失败(如TO_NUMBER('abc'))。
    • ORA-00001: 违反唯一约束条件:插入 / 更新的数据违反了主键或唯一索引的唯一性要求(排查是否插入重复数据)。

三、 总结

  1. IN子句超 1000 条优先用「拆分INOR」或「临时表JOIN」解决,后者更适合企业生产环境。
  2. 从 MySQL 转 Oracle,核心要攻克「语法差异(分页、FROM DUAL)、函数差异(日期、空值)、规范差异(GROUP BY、事务提交)」。
  3. 实习生开发时,优先遵循企业命名规范,遇到报错先排查拼写、数据类型、权限问题,再对照语法差异调整。

掌握以上内容,可快速适配 Oracle 企业开发,避免 80% 以上的新手踩坑。

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

基于Springboot+Vue的校园闲置物品租售系统源码文档部署文档代码讲解等

课题介绍 本课题旨在设计并实现一套基于SpringBootVue的前后端分离校园闲置物品租售系统,解决校园内学生闲置物品浪费、租售渠道分散、交易安全无保障、物品信息杂乱、租赁流程不规范等问题。系统采用SpringBoot作为后端核心框架,结合MyBatis-Plus简化数…

作者头像 李华
网站建设 2026/4/23 9:54:19

基于Springboot+Vue的新能源汽车租赁管理系统源码文档部署文档代码讲解等

课题介绍 本课题旨在设计并实现一套基于SpringBootVue的前后端分离新能源汽车租赁管理系统,解决传统汽车租赁流程繁琐、车辆信息管理混乱、订单跟踪不及时、租赁统计效率低、车辆状态监控不便等问题。系统采用SpringBoot作为后端核心框架,结合MyBatis-Pl…

作者头像 李华
网站建设 2026/4/23 9:53:38

Data Management Processing

1. Backup 备份Explanation: A backup is a copy of data or files that is stored separately from the original source, often used to prevent data loss in case of 万一 system failure, corruption, or accidental deletion.备份是数据或文件的副本,通常存储…

作者头像 李华
网站建设 2026/4/23 11:16:59

easymall---管理后端商品属性管理

需求: 这是前端的页面,约定为前端将信息包装成sysProductProperty类进行返回,要怎么设计表以及实体类 1.建立sysproductProperty表 需要property_id作为主键 标识这个属性 是否包含图片那就需要一个 cover_type 存储 具体的图片存储放在本地的某一文件夹中 不通过数据库保存…

作者头像 李华
网站建设 2026/4/23 11:21:57

stm32的ADC模块在进行单通道ADC测量时,悬空接地电压在OLED显示屏上显示为3.3V,而不是实际的电压值,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者&…

作者头像 李华
网站建设 2026/4/23 11:22:04

大数据时代下 Kafka 的核心原理深度剖析

大数据时代下 Kafka 的核心原理深度剖析 关键词:Kafka、消息队列、分布式架构、分区副本、实时数据流 摘要:在大数据时代,企业每天要处理数以亿计的实时数据(如用户点击、传感器信号、交易记录)。传统消息系统在吞吐量…

作者头像 李华