百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

MySQL和Oracle相关(mysql与oracle)

sinye56 2024-09-22 08:35 4 浏览 0 评论

概述

MySQL和Oracle都是流行的关系数据库管理系统(RDBMS),在世界各地广泛使用。大多数数据库以类似的方式工作。

二者有何区别?两个数据库的特性是不同的,所以与Oracle相比,MySQL的使用方式不同;与MySQL相比,Oracle的使用情况有所不同。它们的特点也是不同的。

区别:

1.本质的区别:

  • Oracle数据库是一个对象关系数据库管理系统(ORDBMS)。它通常被成为OracleRDBMS或简称为Oracle,是一个收费的数据库。
  • MySQL是一个开源的关系数据库管理系统(RDBMS)。它是世界上使用最多的RDBMS (Relational Database Management System,关系数据库管理系统) ,作为服务器运行,提供多个数据库的多用户访问。它是一个开源、免费的数据库。

2.数据库安全性:

  • MySQL使用三个参数来验证用户,即用户名、密码和位置;
  • Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。

3.SQL语法的区别:

Oracle的SQL语法与MySQL有很大不同。Oracle为称为PL/SQL的编程语言提供了更大的灵活性。Oracle的SQL*Plus工具提供了比MySQL更多的命令,用于生成报表输出和变量定义。

4.存储上的区别:

与Oracle相比,MySQL没有表空间,角色管理,快照,同义词和包以及自动存储管理。

5.对象名称的区别:

虽然某些模式对象名称在Oracle和MySQL中都不区分大小写,例如列,存储过程,索引等。但在某些情况下,两个数据库之间的区别大小写是不同的。

  • Oracle对所有对象名称都不区分大小写;
  • 而某些MySQL对象名称(如数据库和表)区分大小写(取决于底层操作系统)。

6.运行程序和外部程序支持:

  • Oracle数据库支持从数据库内部编写,编译和执行的几种编程语言。此外,为了传输数据,Oracle数据库使用XML。
  • MySQL不支持在系统内执行其他语言,也不支持XML。

7.MySQL和Oracle的字符数据类型比较:

两个数据库中支持的字符类型存在一些差异。

  • 对于字符类型,MySQL具有CHAR和VARCHAR,最大长度允许为65535字节(CHAR最多可以为255字节,VARCHAR为65535字节)。
  • 而Oracle支持四种字符类型,即CHAR、NCHAR、VARCHAR2和NVARCHAR2;所有四种字符类型都需要至少1个字节长;CHAR和NCAHR最大可以是2000个字节,VARCHAR2和NVARCHAR2的最大限制是4000个字节。可能会在最新版本中进行扩展。

8.MySQL和Oracle的额外功能比较:

  • MySQL数据库不支持其服务器上的任何功能,如Audit Vault。
  • Oracle支持其数据库服务器上的几个扩展和程序,例如Active Data Guard,Audit Vault,Partitioning和Data Mining等。

9.临时表的区别:

Oracle和MySQL以不同方式处理临时表。

  • 在MySQL中,临时表是仅对当前用户会话可见的数据库对象,并且一旦会话结束,这些表将自动删除。
  • Oracle中临时表的定义与MySQL略有不同,因为临时表一旦创建就会存在,直到它们被显式删除,并且对具有适当权限的所有会话都可见。但是,临时表中的数据仅对数据插入表中的用户会话可见,并且数据可能在事务或用户会话期间持续存在。

10.MySQL和Oracle中的备份类型:

  • Oracle提供不同类型的备份工具,如冷备份,热备份,导出,导入,数据泵。Oracle提供了最流行的称为RecoveryManager(RMAN)的备份实用程序。使用RMAN,我们可以使用极少的命令或存储脚本自动化我们的备份调度和恢复数据库。
  • MySQL有mysqldump和mysqlhotcopy备份工具。在MySQL中没有像RMAN这样的实用程序。

11.Oracle和MySQL的数据库管理:

在数据库管理部分,Oracle DBA比MySQL DBA更有收益。与MySQL相比,Oracle DBA有很多可用的范围。

SQL相关基本语句

  1. 查询数据:
select * from tab_name where conditions order by field1 desc;(精准查询)
desc降序,asc升序
select * from tab_name where field1 like '%value1%'(模糊查询)
  1. 插入记录:
insert into tab_name(field1,field2)values(value1,value2);
  1. 删除记录:
delete from tab_name where conditions;
  1. 更新记录:
update tab_name set field1=value1,field2=value2 where conditions;
  1. 提交数据:
commit;
  1. 回滚数据:
rollback;
  1. 总数:
select count(*) from tab_name
  1. 求和:
select sum(field1) as sumvalue from tab_name
  1. 平均:
select avg(field1) as avgvalue from tab_name
  1. 最大:
select max(field1) as maxvalue from tab_name
  1. 最小:
select min(field1) as minvalue from tab_name
  1. 分组:
grounp by:一张表,一旦分组完成后,查询只能得到组相关的信息。
  1. between的用法,between限制查询数据范围时包括了边界值,not between不包括:
select * from tab_name where time between time1 and time2
select a,b,c from tab_name where a not between num1 and num2
  1. in的用法:
select * from tab_name where a [not] in ('值1','值2','值3','值4')
  1. 两张关联表,删除主表中已经在副表中没有的信息:
delete from tab1 where not exists 
(select * from tab2 where tab1.field1=tab2.field2)
  1. 四表联查:
select * from a 
left inner join b on a.a=b.b 
right inner join c on a.a=c.c 
inner join d on a.a=d.d 
where conditions
  1. 查询相同条目并记录重复次数(大于2):
select a,count(a) from tab_name group by a having count(*) > 2
  1. 创建数据库:
create database database-name;
  1. 删除数据库:
drop database database-name;
  1. 创建新表:
create table depart(
 dept_id int(11) not null auto_increment,
 depr_name varchar(255) default null,
 primary key(dept_id)
 );
  1. 根据已有的表创建新表:
create table tab_new like tab_old;(使用旧表B创建新表A) (MySQL)

备注:此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来。但不会复制数据。

create table tab_new as select col1,col2... from tab_old definition only; 

备注:此种方式只会将B表的字段结构复制到表A中来,但不会复制表B中的索引到表A中来。这种方式比较灵活可以在复制原来表结构的同时指定要复制哪些字段,并且自身复制表也可以根据需要增加字段结构。

  1. 删除表:
drop table tab_name;
  1. 新增表的别名:
comment on tab_name col is '测试'
  1. 更改表名:
alter table tab_oldName rename to tab_newName
  1. 增加一个列:
alter table tab_name add column_name type
  1. 添加主键:
alter table tab_name add primary key(col)
  1. 删除主键:
alter table tab_name drop primary key(col) 

一个数据表只可以有一个主键,所以不存在删除某一列的主键。

  1. 创建索引:
create [unique] index idxname on tab_name(col...)
  1. 删除索引:
drop index idxname;

索引是不可以更改的,想更改必须删除重新建。

  1. 创建视图:
create view viewname as select statement;
  1. 删除视图:
drop view viewname;

pro

查询锁:

select * from dba_blockers;

查询被阻塞的会话:

select * from dba_waiters;

显示两个表内的相同数据:

select column_name from tab_old intersect select column_name from tab_new;

面试:

  1. 查出销量前十的记录:
  2. Oracle:
过度设计:
select id,col from(
select rownum rn,uo.* from (select * from table order by sales desc) uo
where rownum<=10 ) ua;
最优:
select * from table order by sales desc where rownum<=10; 

MySQL:

select * from table order by sales desc limit 10; 
  1. 查找表中多余的重复记录,重复记录是根据单个字段(UserId)来判断
select * from table
where UserId in 
(select UserId from table group by UserId having count(UserId) > 1)
  1. 删除表中多余的重复记录,重复记录是根据单个字段(UserId)来判断,只留有rowid最小的记录
delete from table
where UserId in 
(select UserId from table group by UserId having count(UserId) > 1)
and rowid not in 
(select min(rowid) from table group by UserId having count(UserId)>1)
  1. 查找表中多余的重复记录(多个字段)
select * from table a
where (a.UserId,a.seq) in 
(select UserId,seq from table group by UserId,seq having count(*) > 1)
  1. 删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from table a
where (a.UserId,a.seq) in 
(select UserId,seq from table group by UserId,seq having count(*) > 1)
and rowid not in 
(select min(rowid) from table group by UserId,seq having count(*)>1)
  1. 查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from table a
where (a.UserId,a.seq) in
(select UserId,seq from table group by UserId,seq having count(*) > 1)
and rowid not in
(select min(rowid) from table group by UserId,seq having count(*)>1)

相关推荐

RHEL8和CentOS8怎么重启网络

本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...

Linux 内、外网双网卡路由配置

1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...

Linux——centos7修改网卡名

修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...

CentOS7下修改网卡名称为ethX的操作方法

?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...

Linux 网卡名称enss33修改为eth0

一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...

CentOS下双网卡绑定,实现带宽飞速

方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...

linux 双网卡双网段设置路由转发

背景网络情况linux双网卡:网卡A(ens3)和网卡B(...

Linux-VMware设置网卡保持激活

Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...

VMware虚拟机三种网络模式

01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...

Rocky Linux 9/CentOS Stream 9修改网卡配置/自动修改主机名(实操)

推荐...

2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题

问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...

Linux网卡的Vlan配置,你可能不了解的玩法

如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...

Centos7 网卡绑定

1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...

Linux搭建nginx+keepalived 高可用(主备+双主模式)

一:keepalived简介反向代理及负载均衡参考:...

Linux下Route 路由指令使用详解

linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...

取消回复欢迎 发表评论: