文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL

2023-10-12 09:10

关注

 导航:

【Java笔记+踩坑汇总】Java基础+进阶+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+面试题汇总+源码_vincewm的博客-CSDN博客

目录

一、基本区别

1.1 基本特性

1.2 Oracle和MySQL如何做技术选型?

1.3 RDBMS和ORDBMS的区别

1.4 默认端口号和用户名

1.5 登录方式

1.6 大小写是否敏感

1.6.1 Oracle:双引号下大小写敏感

1.6.2 MySQL:大小写不敏感

二、常用字段类型

2.1 Oracle常用字段类型

2.2 MySQL常用字段类型

三、时间日期

3.1 Oracle

3.2 MySQL

四、创建表空间/数据库

4.1 oracle创建表空间

4.2 MySQL创建数据库

五、创建临时表

5.1 Oracle创建临时表

5.2 MySQL创建临时表

六、删除表空间/数据库

6.1 oracle删除表空间

6.2 MySQL删除数据库

七、数据备份恢复

7.1 oracle导入dmp文件

7.2 MySQL备份迁移

八、创建表和插入记录

8.1 Oracle创建表和插入记录

8.2 MySQL创建表和插入记录

九、事务提交方式

9.1 Oracle:完全支持事务,默认不自动提交

9.2 MySQL:仅innoDB支持事务,默认自动提交

十、分页

10.1 Oracle:利用rownum分类

10.2 MySQL:通过limit关键字分页


一、基本区别

1.1 基本特性

1.2 Oracle和MySQL如何做技术选型?

下面场景下适用于选择Oracle:

1.3 RDBMS和ORDBMS的区别

标准RDBMSOODBMS
缩写含义关系数据库管理系统面型对象数据库管理系统
数据存储方式数据存储在实体里面,以包含特定信息的表格的形式存在数据存储在对象中
数据复杂性处理比较简单的数据比 RDBMS 处理更大且更复杂的数据
分组拥有公共定义的实体集合的不同实体类型用类描述拥有公共的关系、行为和相似的属性的一组对象
数据处理RDBMS 只存储数据存储数据以及方法
主要目标数据独立于应用程序数据封装
主键主键可以明显的标识表中的对象对象标识符 (object identifier, OID) 对于任何一个对象和实体都是明确且持久的

1.4 默认端口号和用户名

Oracle默认端口:1521 默认用户:system
MySQL默认端口:3306 默认用户:root

1.5 登录方式

连接MySQL:

mysql -u root -p-- 输入密码-- 查询所有数据库show databases;-- 切换到 "test" 这个数据库use test;-- 查询该数据库所有表show tables;

连接Oracle:

sqlplus-- 输入用户名-- 输入密码-- 查询该用户的表select TABLE_NAME from user_tables;

注意:Oracle 登录需要授予登录用户 session权限,建表需要分配限额

1.6 大小写是否敏感

1.6.1 Oracle:双引号下大小写敏感

是Oracle大小写不敏感的前提条件是在没有使用双引号 "" 的前提下(表名、字段名)

CREATE TABLE "TableName"("id" number); // 如果创建表的时候是这样写的,那么就必须严格区分大小写SELECT * FROM "TableName"; // 不仅要区分大小写而且要加双引号,以便和上面的第三种查询方式区分开


Oracle默认是大写,对字段的具体值是敏感的

1.6.2 MySQL:大小写不敏感

大小写不敏感(关键字和字段名都不区分)

阿里巴巴Java开发手册,在MySQL建表规约里有:
【强制】表名、字段名必须使用小写字母或数字 , 禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑

Windows 大小写不敏感,文件名同名大小写不同会覆盖

MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免节外生枝
MySQL 的字段 大小写都可以查到

二、常用字段类型

2.1 Oracle常用字段类型

2.2 MySQL常用字段类型

  

三、时间日期

3.1 Oracle

Java中常用的 "yyyy-MM-dd mm:HH;ss" -> "2021-02-03 16:25:48"
在 Oracle 中的表示方式:'yyyy-mm-dd hh24:mi:ss'

3.2 MySQL

-- 获取当前时间戳 select unix_timestamp(); -- 1612340981-- 获取当前日期时间select now();2021-02-03 16:30:22-- 获取当前日期select date(now());-- 2021-02-03-- timestamp -> datetimeselect FROM_UNIXTIME(1612340981);-- 2021-02-03 16:29:41-- datetime -> varchar  (time与之类似:time_format(time,format))select  DATE_FORMAT('2008-08-08 22:23:01','%Y %m %d %H %i %s');-- 2008 08 08 22 23 01-- varchar -> date   str_to_date(str, format)select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30

四、创建表空间/数据库

4.1 oracle创建表空间

sqlplus:

创建表空间

 create tablespace 表空间名称 logging datafile '路径\名称.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local;

示例: 

create tablespace NWZC logging datafile 'D:\javautils\oracle1\oradata\ORCL\zuigaofa.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local;

创建用户

   create user 用户名 identified by 密码 default tablespace 表空间名;


已有用户时,切换到指定用户,修改用户默认表空间:
 

alter database  default tablespace 表空间;

示例: 

alter database  default tablespace NWZC;

授权 

grant exp_full_database to 用户名 ;grant imp_full_database to 用户名 ;grant resource to 用户名 ;grant connect to 用户名 ;grant dba to 用户名 ;

示例:

grant exp_full_database to NWZC;grant imp_full_database to NWZC;grant resource to NWZC;grant connect to NWZC;grant dba to NWZC;

4.2 MySQL创建数据库

-- 查询数据库SHOW DATABASES;-- 创建数据库CREATE DATABASE 数据库名称;-- 创建数据库(判断,如果不存在则创建)CREATE DATABASE IF NOT EXISTS 数据库名称;-- 查看当前使用的数据库SELECT DATABASE();-- 使用数据库USE 数据库名称;

五、创建临时表

5.1 Oracle创建临时表

Oracle临时表默认所有会话内可见,一旦创建就会存在,直到显式删除。可以设置临时表仅在当前会话内或事务内可见。

CREATE GLOBAL TEMPORARY TABLE temp_table (    id NUMBER,    name VARCHAR2(50)) ON COMMIT DELETE ROWS;

ON COMMIT DELETE ROWS指定了当事务提交时,临时表中的所有行都会被删除。这保证了当会话结束时,所有临时数据都会被清除。 

设置临时表消失的时机:

临时表中数据的增删改查,跟普通表一致:

Insert into tmp_gttable (id,name) values(1,'test');Update tmp_gttable set name = 'test_update' where id = 1;Delete from tmp_gttable where id = 1;

5.2 MySQL创建临时表

MySQL临时表只在当前会话可见,一旦会话关闭,临时表会自动删除。

CREATE TEMPORARY TABLE 表名 (字段列表);

示例如下:

CREATE TEMPORARY TABLE tmp_table (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50) NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB;

临时表创建成功后,可以使用SELECT、INSERT、UPDATE、DELETE等语句对其进行操作,与普通表的语法相同。 

六、删除表空间/数据库

6.1 oracle删除表空间

删除无任何数据对象的表空间

drop tablespace xxx

删除有任何数据对象的表空间

drop tablespace xxx including contents and datafiles;

6.2 MySQL删除数据库

-- 删除数据库DROP DATABASE 数据库名称;-- 删除数据库(判断,如果存在则删除)DROP DATABASE IF EXISTS 数据库名称;

七、数据备份恢复

7.1 oracle导入dmp文件

首先确保dmp版本和本地oracle版本一致

将需要导入的dmp文件放在oracle11g的安装目录里面的./admin/orcl/dpdump目录下面

右键dmp用notepad++打开,在第二行找到版本号,改成自己的oracle版本,例如我的版本是19c:

sqlplus:用system账号创建用户并授权

create user ZHANGSAN identified by 1234;grant connect , dba to ZHANGSAN ;grant resource to ZHANGSAN ;grant imp_full_database to ZHANGSAN ;grant exp_full_database to ZHANGSAN ;

cmd命令行:迁移

impdp ZHANGSAN/1234 dumpfile = XXX.dmp

7.2 MySQL备份迁移

直接用navicat转储和运行SQL文件即可:

八、创建表和插入记录

8.1 Oracle创建表和插入记录

create table t_student(    sid int primary key ,    sname varchar2(10) not null ,    enterdate date,    gender char(2),    mail unique,    age number check (age>19 and age<30))insert into t_student values(stuseq.nextval,'Test',to_date('1990-3-4','YYYY-MM-DD'),'男','1@outlook.com',20);commit;

8.2 MySQL创建表和插入记录

create table t_student(    sid int primary key auto_increment,    sname varchar(1) not null ,    enterdate date,    gender char(1),    age int,    mail varchar(10) UNIQUE)insert into t_student values(null,'Test','1990-3-4','男',30,'2@outlook.com')

MySQL插入日期使用now() 或 sysdate(),可以插入多条,使用逗号隔开
删表数据:Oracle可以省略from:delete from t_student; (删除所有数据)

外键约束:Oracle是constraints,MySQL是constraint

级联操作:

九、事务提交方式

9.1 Oracle:完全支持事务,默认不自动提交

oracle默认不自动提交,需要用户手动提交,提交可以通过以下几个命令实现:

示例:

BEGIN    SAVEPOINT sp;        -- 向学生表插入数据    INSERT INTO student_table (student_name, student_age) VALUES ('John', 18);    INSERT INTO student_table (student_name, student_age) VALUES ('Emma', 19);        -- 向班级表插入数据    INSERT INTO class_table (class_name, class_size) VALUES ('Class A', 30);    INSERT INTO class_table (class_name, class_size) VALUES ('Class B', 28);        COMMIT;EXCEPTION    WHEN OTHERS THEN        ROLLBACK TO sp;        RAISE;END;

9.2 MySQL:仅innoDB支持事务,默认自动提交

查看事务提交状态

SHOW STATUS LIKE 'Innodb_trx_id'

关闭事务提交:

set AutoCommit = 0;

手动提交事务:

START TRANSACTION;        -- 开始事务INSERT INTO student (name,age) VALUES ('Tom',18); -- 执行一些数据操作INSERT INTO score (student_id,score) VALUES (1,90);COMMIT;       -- 手动提交事务

十、分页

10.1 Oracle:利用rownum分类

-- 利用rownum。rownum从0开始select * from(select rownum rr,stu.* from (select * from t_student order by sid desc) stu )where rr>=1 and rr<=5;

10.2 MySQL:通过limit关键字分页

-- 记录从0开始-- 从第0条开始,取5条数据select * from test2 order by sid desc  limit 0,5

来源地址:https://blog.csdn.net/qq_40991313/article/details/132077467

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯