(课堂笔记)Mysql 基础(对比 Oracle 学习)

📅 2026/7/11 20:52:20 👁️ 阅读次数 📝 编程学习
(课堂笔记)Mysql 基础(对比 Oracle 学习)

本文介绍了MySQL客户端工具(SQLYog/Navicat/Dbeaver)的连接配置方法(主机192.168.5.100,用户root,密码123456),对比了MySQL 5.7和8.0版本特性差异。


详细说明了MySQL基础操作:数据库/表创建、增删改查语法,以及与Oracle在数据类型、函数(如日期处理、分页查询)、程序块语法等方面的主要区别。


重点包括:MySQL使用LIMIT分页而非ROWNUM,日期函数如NOW()替代SYSDATE,存储过程使用DELIMITER定义分隔符等特性差异。

关联阅读推荐


MySQL 函数速查表:快速通过在线SQL测试


Oracle 查看表结构的方法(MySQL vs Oracle 查看表结构对比)


Mysql


客户端

提供开发环境给开发者连接 Mysql 写代码的
SQLYog、Navicat、Dbeaver 等

连接信息
主机名:node100
主机服务器:192.168.5.100
用户:root
密码:123456
点击“测试连接”,没问题之后点击“连接”(弹出框点击“确认”)


Mysql 常用版本

  • Mysql 5.7:老版本,兼容性较好(函数不是很齐全,不支持开窗)

  • Mysql 8.0:新版本,函数会比较全(支持开窗函数)

Mysql 作为传统关系型数据库,语法层面跟 Oracle 基本上大同小异


基础语法

OracleMysql
SELECT * FROM SCOTT.EMP;(SCOTT 叫用户名/模式名/Schema)SELECT * FROM lee.t_id;(lee 叫数据库名)

sql

SHOW DATABASES; -- 查看所有数据库 CREATE DATABASE 数据库名; -- 创建数据库 USE 数据库名; -- 切换到目标数据库 SHOW TABLES; -- 查看当前数据库下所有的表 CREATE TABLE 表名( 字段名1 字段类型1, 字段名2 字段类型2... ); -- 创建表

数据类型

  • 数值:INT 整型、FLOAT 浮点型、DOUBLE 双精度浮点型

  • 字符串:VARCHAR(X) 可变长度、CHAR(X) 固定长度

  • 日期:DATE / TIMESTAMP

示例:创建一张学生信息表

sql

USE A2608; CREATE TABLE T_STUDENT( SNO INT, SNAME VARCHAR(100), CLASS VARCHAR(100), SCORE FLOAT );

增删改查

增(INSERT)—— 不需要提交/回滚

sql

INSERT INTO T_STUDENT VALUES (101,'zhangsan','yuwen',100), (101,'zhangsan','shuxue',79.5), (101,'zhangsan','yingyu',88); INSERT INTO T_STUDENT SELECT * FROM T_STUDENT;

改(UPDATE)—— 不需要提交/回滚

sql

UPDATE T_STUDENT SET SCORE = SCORE + 10, SNO = 102 WHERE CLASS = 'yuwen';

删(DELETE)—— 不需要提交/回滚

sql

DELETE FROM T_STUDENT WHERE SNO = 101; TRUNCATE TABLE T_STUDENT; DROP TABLE T_STUDENT;

查(SELECT)

sql

SELECT * FROM T_STUDENT;

区别点

1. Mysql 没有对应的伪列 / 伪表

sql

SELECT ROWID, ROWNUM FROM T_STUDENT; -- 没有的 SELECT 'ABC';

2. 数据类型差异

OracleMysql
VARCHAR2(X)VARCHAR(X)
NUMBER(X,Y)INT / FLOAT / DOUBLE
DATEDATE / TIMESTAMP

3. 函数差异

OracleMysql
SYSDATENOW() / CURRENT_DATE()
UNIX_TIMESTAMP()
FROM_UNIXTIME()
TO_DATE / TO_CHARDATE_FORMAT
日期A - 日期BDATEDIFF(日期A, 日期B)
日期A - 天数DATE_SUB(日期, INTERVAL N DAY)
日期A + 天数DATE_ADD(日期, INTERVAL N DAY)
REGEXP_SUBSTRSUBSTRING_INDEX
WM_CONCATGROUP_CONCAT
|| / CONCATCONCAT(X,Y,Z)
分页查询 ROWNUMLIMIT M,N

sql

SELECT NOW(), CURRENT_DATE(), UNIX_TIMESTAMP(), DATE_FORMAT(NOW(),'%Y/%m/%d'), FROM_UNIXTIME(1); SELECT SUBSTRING_INDEX('A-B-C','-',2); SELECT * FROM T_STUDENT LIMIT 0,1;

4. 程序块的区别

示例:往 LEE.T_ID 表全量插入 1~100

sql

DELIMITER $$$ DROP PROCEDURE IF EXISTS P_AAA; CREATE PROCEDURE P_AAA() BEGIN TRUNCATE TABLE LEE.T_ID; SET @A = 1; WHILE @A <= 100 DO INSERT INTO LEE.T_ID VALUES(@A); SET @A = @A + 1; END WHILE; END$$$ DELIMITER ; -- 调用 CALL LEE.P_AAA(); -- 验证 SELECT * FROM LEE.T_ID;

程序块的分隔符(自定义的)$$$ 可以重复使用