Oracle和MySQL有哪些区别?从基本特性、技能选型、字段范例、事务、语句等 ...

打印 上一主题 下一主题

主题 1786|帖子 1786|积分 5358

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 导航:
  【Java条记+踩坑汇总】Java基础+进阶+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+计划模式+面试题汇总+源码_vincewm的博客-CSDN博客
  目录
一、基本区别
1.1 基本特性
1.2 Oracle和MySQL如何做技能选型?
1.3 RDBMS和ORDBMS的区别
1.4 默认端标语和用户名
1.5 基本利用
1.5.1 登录方式
1.5.2 修改用户名密码 
1.5.3 Oracle解锁账号
1.5.4 Oracle内存优化
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 基本特性



  • 数据库范例:Oracle数据库是一个对象关系数据库管理体系(ORDBMS),MySQL是一个开源的关系数据库管理体系(RDBMS)。

    • 对象关系 数据库管理体系:基于对象模型,存储数据及其方法,数据存储在对象中。拥有对象类、对象标识、多态、封装和继承等特性。用于存储复杂的数据。
    • 关系 数据库管理体系:基于关系模型, 只存储数据,数据存储在实体内里,以包罗特定信息的表格的形式存在。用于处置惩罚比较简朴的数据

  • 客户规模:Oracle主要面向大企业级级别的用户,而MySQL则更得当中小型企业和个人。根据Gartner的数据,截至2020年,Oracle占据了环球关系型数据库管理体系市场的凌驾40%的份额,而MySQL仅占5%。
  • 成本:Oracle是一种专业的数据库管理体系,需要付费购买许可证。MySQL(社区版,支持基本功能)是一种免费的数据库管理体系,如果需要使用它的高级功能(如多线程复制、查询性能优化、物理备份和增量备份、安全和加密功能、管理和监控工具、官方服务等),大概需要购买许可证或商业版本(企业版)。
  • 可移植性和兼容性:MySQL可以很容易地在各种平台上运行,并与其他许多开源软件集成。Oracle虽然也有跨平台支持,但更方向于使用自己的技能堆栈和产物集成。 
  • 安全性:Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。MySQL只使用三个参数来验证用户,即用户名,密码和位置。
  • 内存:Oracle占据内存空间大(因为面对对象,而且还存储数据的方法);MySQL占据内存空间比较小
  • 性能和扩展性:由于MySQL的精简计划和管理方式,所以其性能通常比Oracle更高,尤其在读取和写入方面。MySQL的扩展性也相对较好,因为其社区活跃,有许多插件和工具可供选择和使用。
  • 支持并发量:Oracle支持大并发访问量,是OLTP(联机事务处置惩罚)最好的工具;MySQL并发小,面对大访问量可以做分表分库优化。

    • OLTP(联机事务处置惩罚):表示事务性非常高的体系,一般都是高可用的在线体系,以小的事务以及小的查询为主,评估其体系的时候,一般看其每秒实行的Transaction以及Execute SQL的数量。典范的OLTP体系有电子商务体系、银行、证券等。 

  • 存储内容:与Oracle相比,MySQL没有表空间,脚色管理,快照,同义词和包以及自动存储管理。
  • 可移植性和兼容性:MySQL可以很容易地在各种平台上运行,并与其他许多开源软件集成。Oracle虽然也有跨平台支持,但更方向于使用自己的技能堆栈和产物集成。
  • 暂时表特点:Oracle暂时表默认全部会话内可见,一旦创建就会存在,直到显式删除。可以设置暂时表仅在当前会话内或事务内可见。MySQL暂时表只在当前会话可见,一旦会话关闭,暂时表会自动删除。
1.2 Oracle和MySQL如何做技能选型?

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


  • 对数据库有高级需求:如果企业对数据库的高级需求较高,如存储复杂数据及其方法,要求高可用性、灾备恢复、安全性等,可以思量用Oracle。
  • 大型企业应用:Oracle在处置惩罚大规模、复杂的企业级应用方面体现出色。它能够处置惩罚海量的数据和高并发的访问哀求,同时支持复杂的数据模型和关系。
  • 项目并发量高:使用Oracle,它是是OLTP(联机事务处置惩罚)最好的工具。
  • 安全性要求高:Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。像金融、银行等对安全性要求高的项目一般都选用Oracle作为数据库。
  • 高可用性和容灾需求:Oracle提供了强盛的高可用性和容灾办理方案,例如集群配置、数据复制和自动故障转移等,能够确保体系的连续性和数据的可靠性。MySQL付费版也支持,但可靠性不如Oracle。
1.3 RDBMS和ORDBMS的区别

标准RDBMSOODBMS缩写含义关系数据库管理体系面型对象数据库管理体系数据存储方式数据存储在实体内里,以包罗特定信息的表格的形式存在数据存储在对象中数据复杂性处置惩罚比较简朴的数据比 RDBMS 处置惩罚更大且更复杂的数据分组拥有公共界说的实体集合的不同实体范例用类描述拥有公共的关系、行为和相似的属性的一组对象数据处置惩罚RDBMS 只存储数据存储数据以及方法主要目标数据独立于应用步伐数据封装主键主键可以显着的标识表中的对象对象标识符 (object identifier, OID) 对于任何一个对象和实体都是明确且长期的 1.4 默认端标语和用户名

Oracle默认端口:1521 默认用户:system
MySQL默认端口:3306 默认用户:root
1.5 基本利用

1.5.1 登录方式

毗连MySQL:
  1. mysql -u root -p
  2. -- 输入密码
  3. -- 查询所有数据库
  4. show databases;
  5. -- 切换到 "test" 这个数据库
  6. use test;
  7. -- 查询该数据库所有表
  8. show tables;
复制代码
毗连Oracle:
  1. sqlplus
  2. -- 输入用户名
  3. -- 输入密码
  4. -- 查询该用户的表
  5. select TABLE_NAME from user_tables;
复制代码
注意:Oracle 登录需要授予登任命户 session权限,建表需要分配限额
1.5.2 修改用户名密码 

MySQL修改密码:
1. win+r快捷键,输入cmd进入命令行:
  1. cmd
复制代码


2.登录MySQL
  1. mysql -u用户名 -p密码
复制代码
3.修改MySQL的root用户密码
  1. set password for 用户名@localhost = password('新密码')
复制代码
示例: 
  1. #将用户root的密码更改为hello;
  2. set password for root@localhost = password('hello');
复制代码
Oracle修改密码:
1.win+r快捷键,输入cmd进入命令行:
  1. cmd
复制代码

2.sqlplus进入Oracle命令行:
  1. sqlplus
复制代码
3.输入用户名密码登录;
4.修改密码:
  1. ALTER USER 用户名 IDENTIFIED BY 新密码;
复制代码
示例:

1.5.3 Oracle解锁账号

Oracle 在多次输错密码的情况下,会锁定该账户,导致无法登录数据库。
检察被锁定的账号:
  1. SELECT username, account_status
  2. FROM dba_users
  3. WHERE account_status LIKE '%LOCKED%';
复制代码
解锁账号:
  1. ALTER USER 用户名 ACCOUNT UNLOCK;
复制代码
 恢复密码:
  1. ALTER USER 用户名 IDENTIFIED BY 新密码 ACCOUNT UNLOCK;
复制代码
  示例:解锁system用户:
  1. -- 解锁。用户名不用引号
  2. ALTER USER SYSTEM ACCOUNT UNLOCK;
  3. -- 设置密码
  4. ALTER USER SYSTEM IDENTIFIED BY SYSTEM ACCOUNT UNLOCK;
复制代码

  1.5.4 Oracle内存优化

1.开启自动内存管理Automatic Memory Management(AMM)
Oracle开启AMM后,会根据当前体系的内存情况动态地分配内存,直到到达指定的最大值。当体系需要更多内存时,AMM会自动减少内存使用量。
  1. ALTER SYSTEM SET MEMORY_TARGET=2GB,SCOPE=SPFILE;
复制代码
AMM还可以设置max_memory_target参数,以控制最大内存使用:
  1. ALTER SYSTEM SET MEMORY_MAX_TARGET=3GB,SCOPE=SPFILE;
复制代码
2.开启自动共享内存管理Automatic Shared Memory Management(ASMM)
ASMM会自动检测当前体系的内存使用情况,并根据需求分配和释放共享内存地区。
与AMM不同,ASMM只处置惩罚共享池、缓冲区高速缓存、Java池和辅助预留区的共享内存。
  1. ALTER SYSTEM SET SGA_TARGET=1024M;
  2. ALTER SYSTEM SET SGA_MAX_SIZE=2048M;
复制代码
1.6 巨细写是否敏感

1.6.1 Oracle:双引号下巨细写敏感

是Oracle巨细写不敏感的条件条件是在没有使用双引号 "" 的条件下(表名、字段名)
  1. CREATE TABLE "TableName"("id" number); // 如果创建表的时候是这样写的,那么就必须严格区分大小写
  2. SELECT * FROM "TableName"; // 不仅要区分大小写而且要加双引号,以便和上面的第三种查询方式区分开
复制代码

Oracle默认是大写,对字段的具体值是敏感的
1.6.2 MySQL:巨细写不敏感

巨细写不敏感(关键字和字段名都不区分)
阿里巴巴Java开发手册,在MySQL建表规约里有:
【强制】表名、字段名必须使用小写字母或数字 , 克制出现数字开头,克制两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重思量
Windows 巨细写不敏感,文件名同名巨细写不同会覆盖
MySQL 在 Windows 下不区分巨细写,但在 Linux 下默认是区分巨细写。因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免添枝加叶
MySQL 的字段 巨细写都可以查到


二、常用字段范例

2.1 Oracle常用字段范例



  • 数值:number number(10) number(10,2)
  • 字符串:CHAR,NCHAR,VARCHAR2和NVARCHAR2。四种字符范例都需要至少1个字节长; CHAR和NCHAR最大可以是2000个字节,NVARCHAR2和VARCHAR2的最大限制是4000个字节。
  • 日期:date
2.2 MySQL常用字段范例



  • 数值:tinyint smallint mediumint int bigint decimal
  • 字符串:char、varchar(10) 。最大长度允许为65,535字节(CHAR最多可以为255字节,VARCHAR为65.535字节)。
  • 日期:date time datetime timestamp year
  
三、时间日期

3.1 Oracle

对于常见的时间格式: "2021-02-03 16:25:48"


  • Java中的表示方式:
    1. "yyyy-MM-dd HH:mm;ss"
    复制代码

  • Oracle 中的表示方式:
    1. 'yyyy-mm-dd hh24:mi:ss'
    复制代码

   示例-Java:
  1.         // 定义日期格式
  2.         String inputPattern = "yyyy-MM-dd HH:mm:ss";
  3.         String outputPattern = "yyyy-MM-dd HH:mm:ss";
  4.         // 待格式化的日期字符串
  5.         String inputDateStr = "2021-02-03 16:25:48";
  6.         try {
  7.             // 将待格式化的日期字符串解析为 Date 对象
  8.             SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern);
  9.             Date date = inputFormat.parse(inputDateStr);
  10.             // 创建目标日期格式
  11.             SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);
  12.             // 格式化日期
  13.             String outputDateStr = outputFormat.format(date);
  14.             // 打印格式化后的日期
  15.             System.out.println("Formatted Date: " + outputDateStr);
  16.         } catch (Exception e) {
  17.             e.printStackTrace();
  18.         }
复制代码

    示例-Oracle:
  1. SELECT TO_CHAR(date, 'yyyy-mm-dd hh24:mi:ss') AS formatted_date
  2. FROM your_table;
复制代码

  3.2 MySQL

  1. -- 获取当前时间戳
  2. select unix_timestamp();
  3. -- 1612340981
  4. -- 获取当前日期时间
  5. select now();
  6. 2021-02-03 16:30:22
  7. -- 获取当前日期
  8. select date(now());
  9. -- 2021-02-03
  10. -- timestamp -> datetime
  11. select FROM_UNIXTIME(1612340981);
  12. -- 2021-02-03 16:29:41
  13. -- datetime -> varchar  (time与之类似:time_format(time,format))
  14. select  DATE_FORMAT('2008-08-08 22:23:01','%Y %m %d %H %i %s');
  15. -- 2008 08 08 22 23 01
  16. -- varchar -> date   str_to_date(str, format)
  17. select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s');
  18. -- 2008-08-09 08:09:30
复制代码


四、创建表空间/数据库

4.1 Oracle创建表空间

sqlplus:
创建表空间
  1.  create tablespace 表空间名称 logging datafile '路径\名称.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local;
复制代码
  示例: 
  1. create tablespace NWZC logging datafile 'D:\javautils\oracle1\oradata\ORCL\zuigaofa.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local;
复制代码

  
  创建用户

  1.    create user 用户名 identified by 密码 default tablespace 表空间名;
复制代码

修改用户默认表空间:
 
  1. alter user 用户名 default tablespace 表空间名
复制代码
  示例: 
  1. alter database  default tablespace NWZC;
复制代码

  授权 
  1. grant exp_full_database to 用户名 ;
  2. grant imp_full_database to 用户名 ;
  3. grant resource to 用户名 ;
  4. grant connect to 用户名 ;
  5. grant dba to 用户名 ;
复制代码
  示例:
  1. grant exp_full_database to NWZC;
  2. grant imp_full_database to NWZC;
  3. grant resource to NWZC;
  4. grant connect to NWZC;
  5. grant dba to NWZC;
复制代码

  
  4.2 MySQL创建数据库

  1. -- 查询数据库
  2. SHOW DATABASES;
  3. -- 创建数据库
  4. CREATE DATABASE 数据库名称;
  5. -- 创建数据库(判断,如果不存在则创建)
  6. CREATE DATABASE IF NOT EXISTS 数据库名称;
  7. -- 查看当前使用的数据库
  8. SELECT DATABASE();
  9. -- 使用数据库
  10. USE 数据库名称;
复制代码
五、创建暂时表

5.1 Oracle创建暂时表

Oracle暂时表默认全部会话内可见,一旦创建就会存在,直到显式删除。可以设置暂时表仅在当前会话内或事务内可见。
  1. CREATE GLOBAL TEMPORARY TABLE temp_table (
  2.     id NUMBER,
  3.     name VARCHAR2(50)
  4. ) ON COMMIT DELETE ROWS;
复制代码
ON COMMIT DELETE ROWS指定了当事务提交时,暂时表中的全部行都会被删除。这包管了当会话结束时,全部暂时数据都会被清除。 
设置暂时表消失的机会:


  • ON COMMIT DELETE ROWS :数据行只有在当前事务中可见,也是默认值,事务提交后数据行将消失
  • ON COMMIT PRESERVE ROWS :数据行仅在当前会话中可见
暂时表中数据的增删改查,跟平常表同等:
  1. Insert into tmp_gttable (id,name) values(1,'test');
  2. Update tmp_gttable set name = 'test_update' where id = 1;
  3. Delete from tmp_gttable where id = 1;
复制代码
5.2 MySQL创建暂时表

MySQL暂时表只在当前会话可见,一旦会话关闭,暂时表会自动删除。
  1. CREATE TEMPORARY TABLE 表名 (字段列表);
复制代码

示例如下:
  1. CREATE TEMPORARY TABLE tmp_table (
  2. id INT NOT NULL AUTO_INCREMENT,
  3. name VARCHAR(50) NOT NULL,
  4. PRIMARY KEY (id)
  5. ) ENGINE=InnoDB;
复制代码
暂时表创建乐成后,可以使用SELECT、INSERT、UPDATE、DELETE等语句对其进行利用,与平常表的语法相同。 
六、删除表空间/数据库

6.1 Oracle删除表空间

1、删除无任何数据对象的表空间:
  1. drop tablespace xxx
复制代码

2、删除有任何数据对象的表空间
  1. drop tablespace xxx including contents and datafiles;
复制代码
6.2 MySQL删除数据库

  1. -- 删除数据库
  2. DROP DATABASE 数据库名称;
  3. -- 删除数据库(判断,如果存在则删除)
  4. DROP DATABASE IF EXISTS 数据库名称;
复制代码

七、数据备份恢复

7.1 Oracle导入dmp文件

1.起首确保dmp版本和本地oracle版本同等
2.将需要导入的dmp文件放在oracle11g的安装目录内里的./admin/orcl/dpdump目录下面


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



3.sqlplus:用system账号创建用户并授权
  1. create user ZHANGSAN identified by 1234;
  2. grant connect , dba to ZHANGSAN ;
  3. grant resource to ZHANGSAN ;
  4. grant imp_full_database to ZHANGSAN ;
  5. grant exp_full_database to ZHANGSAN ;
复制代码
4.cmd命令行:迁移
  1. impdp ZHANGSAN/1234 dumpfile = XXX.dmp
复制代码




7.2 MySQL备份迁移

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


八、创建表和插入记录

8.1 Oracle创建表和插入记录

  1. create table t_student(
  2.     sid int primary key ,
  3.     sname varchar2(10) not null ,
  4.     enterdate date,
  5.     gender char(2),
  6.     mail unique,
  7.     age number check (age>19 and age<30)
  8. )
  9. insert into t_student values(stuseq.nextval,'Test',to_date('1990-3-4','YYYY-MM-DD'),'男','1@outlook.com',20);
  10. commit;
复制代码
8.2 MySQL创建表和插入记录

  1. create table t_student(
  2.     sid int primary key auto_increment,
  3.     sname varchar(1) not null ,
  4.     enterdate date,
  5.     gender char(1),
  6.     age int,
  7.     mail varchar(10) UNIQUE
  8. )
  9. 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
级联利用:


  • Oracle:on delete set null 或者on delete cascade
  • MySQL: on delete set null on update CASCADE
九、事务提交方式

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

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


  • BEGIN:事务块开始的标记。事务块里的SQL语句要么全部实行乐成,要么全部失败回滚。
  • COMMIT:提交事务。实行乐成时,事务将被提交,而且对数据库的修改是可见的。
  • ROLLBACK:ROLLBACK用于取消尚未提交的事务,并将数据库恢复到事务开始之前的状态。当ROLLBACK语句实行乐成时,事务中的全部修改都将被撤销。
  • SAVEPOINT:SAVEPOINT用于在事务中创建一个保存点,以便在事务实行过程中可以回滚到该保存点。它可以在事务中设置一个中间点,以便在需要时回滚到该点。
  • SET TRANSACTION:SET TRANSACTION用于设置事务的属性。通过该命令,可以设置事务的隔离级别、读写权限等属性。
示例:
  1. BEGIN
  2.     SAVEPOINT sp;
  3.    
  4.     -- 向学生表插入数据
  5.     INSERT INTO student_table (student_name, student_age) VALUES ('John', 18);
  6.     INSERT INTO student_table (student_name, student_age) VALUES ('Emma', 19);
  7.    
  8.     -- 向班级表插入数据
  9.     INSERT INTO class_table (class_name, class_size) VALUES ('Class A', 30);
  10.     INSERT INTO class_table (class_name, class_size) VALUES ('Class B', 28);
  11.    
  12.     COMMIT;
  13. EXCEPTION
  14.     WHEN OTHERS THEN
  15.         ROLLBACK TO sp;
  16.         RAISE;
  17. END;
复制代码
9.2 MySQL:仅innoDB支持事务,默认自动提交

检察事务提交状态
  1. SHOW STATUS LIKE 'Innodb_trx_id'
复制代码
关闭事务提交:
  1. set AutoCommit = 0;
复制代码
手动提交事务:
  1. START TRANSACTION;        -- 开始事务
  2. INSERT INTO student (name,age) VALUES ('Tom',18); -- 执行一些数据操作
  3. INSERT INTO score (student_id,score) VALUES (1,90);
  4. COMMIT;       -- 手动提交事务
复制代码


十、分页

10.1 Oracle:利用rownum分类

  1. -- 利用rownum。rownum从0开始
  2. select * from
  3. (select rownum rr,stu.* from (select * from t_student order by sid desc) stu )
  4. where rr>=1 and rr<=5;
复制代码
10.2 MySQL:通过limit关键字分页

  1. -- 记录从0开始
  2. -- 从第0条开始,取5条数据
  3. select * from test2 order by sid desc  limit 0,5
复制代码





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表