本文介绍了MySQL客户端工具(SQLYog/Navicat/Dbeaver)的连接配置方法(主机192.168.5.100,用户root,密码123456),对比了MySQL 5.7和8.0版本特性差异。
详细说明了MySQL基础操作:数据库/表创建、增删改查语法,以及与Oracle在数据类型、函数(如日期处理、分页查询)、程序块语法等方面的主要区别。
重点包括:MySQL使用LIMIT分页而非ROWNUM,日期函数如NOW()替代SYSDATE,存储过程使用DELIMITER定义分隔符等特性差异。
关联阅读推荐
Mysql
客户端
提供开发环境给开发者连接 Mysql 写代码的
SQLYog、Navicat、Dbeaver 等
下载并安装 SQLYog
连接信息
主机名:node100
主机服务器:192.168.5.100
用户:root
密码:123456
点击"测试连接",没问题之后点击"连接"(弹出框点击"确认")
Mysql 常用版本
-
Mysql 5.7:老版本,兼容性较好(函数不是很齐全,不支持开窗)
-
Mysql 8.0:新版本,函数会比较全(支持开窗函数)
Mysql 作为传统关系型数据库,语法层面跟 Oracle 基本上大同小异
当前连接到的 Mysql 服务器中,默认只有系统数据库:
information_schema、mysql、performance_schema、sys
笔记中
lee只是示例数据库名,你需要根据自己的实际环境创建或使用对应的数据库
SELECT * FROM 数据库名.表名这种写法要求该数据库必须存在
基础语法
| Oracle | Mysql |
|---|---|
SELECT * FROM SCOTT.EMP;(SCOTT 叫用户名/模式名/Schema) |
SELECT * FROM lee.t_id;(lee 叫数据库名) |
sql
-- 1. 创建数据库
CREATE DATABASE lee;
-- 2. 切换到 lee 数据库
USE lee;
-- 3. 创建 t_id 表
CREATE TABLE t_id (
id INT
);
-- 4. 插入测试数据
INSERT INTO t_id VALUES (1), (2), (3);
-- 5. 查询
SELECT * FROM lee.t_id;
数据类型
-
数值:INT 整型、FLOAT 浮点型、DOUBLE 双精度浮点型
-
字符串:VARCHAR(X) 可变长度、CHAR(X) 固定长度
-
日期:DATE / TIMESTAMP
示例:创建一张学生信息表
sql
sql
USE A2608;
CREATE TABLE T_STUDENT(
SNO INT,
SNAME VARCHAR(100),
CLASS VARCHAR(100),
SCORE FLOAT
);
增删改查
增(INSERT)------ 不需要提交/回滚
sql
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
sql
UPDATE T_STUDENT
SET SCORE = SCORE + 10,
SNO = 102
WHERE CLASS = 'yuwen';
删(DELETE)------ 不需要提交/回滚
sql
sql
DELETE FROM T_STUDENT WHERE SNO = 101;
TRUNCATE TABLE T_STUDENT;
DROP TABLE T_STUDENT;
查(SELECT)
sql
sql
SELECT * FROM T_STUDENT;
区别点
1. Mysql 没有对应的伪列 / 伪表
sql
sql
SELECT ROWID, ROWNUM FROM T_STUDENT; -- 没有的
SELECT 'ABC';
2. 数据类型差异
| Oracle | Mysql |
|---|---|
| VARCHAR2(X) | VARCHAR(X) |
| NUMBER(X,Y) | INT / FLOAT / DOUBLE |
| DATE | DATE / TIMESTAMP |
3. 函数差异
| Oracle | Mysql |
|---|---|
| SYSDATE | NOW() / CURRENT_DATE() |
| 无 | UNIX_TIMESTAMP() |
| 无 | FROM_UNIXTIME() |
| TO_DATE / TO_CHAR | DATE_FORMAT |
| 日期A - 日期B | DATEDIFF(日期A, 日期B) |
| 日期A - 天数 | DATE_SUB(日期, INTERVAL N DAY) |
| 日期A + 天数 | DATE_ADD(日期, INTERVAL N DAY) |
| REGEXP_SUBSTR | SUBSTRING_INDEX |
| WM_CONCAT | GROUP_CONCAT |
| || / CONCAT | CONCAT(X,Y,Z) |
| 分页查询 ROWNUM | LIMIT M,N |
sql
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
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;
程序块的分隔符(自定义的)$$$ 可以重复使用