Oracle数据库对比MySQL

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。Oracle数据库对比MySQL,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

基本

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

连接MySQL:

mysql -u root -p
-- 输入密码

-- 查询所有数据库
show databases;
-- 切换到 "test" 这个数据库
use test;
-- 查询该数据库所有表
show tables;

连接Oracle:

sqlplus
-- 输入用户名
-- 输入密码

-- 查询该用户的表
select TABLE_NAME from user_tables;

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

常用字段类型

Oracle
数值 number number(10) number(10,2)
字符串 varchar2 varchar2(20)
日期 date

MySQL
数值 tinyint smallint mediumint int bigint decimal
字符串 varchar(10) 必须指定
日期 date time datetime timestamp year

DML

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;

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

级联操作:

  • Oracle:on delete set null 或者on delete cascade
  • MySQL: on delete set null on update CASCADE

多表操作

Oracle:92语法:可以内连接,外连接99语法:可以内连接,外连接,全外连接(full join)

-- SQL92 左外连接(保留左边, 注意(+)要放在右边,记忆:左外,右边会出现空行要+补齐) 
where e.department_id = d.department_id(+)
-- 

MySQL:只支持内连接、外连接,并且只能用类似oracle中99语法的格式写,MySQL不完全符合SQL-92规范

SQL 语句

MySQL

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

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

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

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

Oracle

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

CREATE TABLE “TableName”(“id” number); // 如果创建表的时候是这样写的,那么就必须严格区分大小写

SELECT * FROM “TableName”; // 不仅要区分大小写而且要加双引号,以便和上面的第三种查询方式区分开
Oracle默认是大写,对字段的具体值是敏感的

分页

Oracle:

-- 利用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;

MySQL:

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

时间日期

Oracle

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

MySQL

-- 获取当前时间戳 
select unix_timestamp(); 
-- 1612340981

-- 获取当前日期时间
select now();
2021-02-03 16:30:22

-- 获取当前日期
select date(now());
-- 2021-02-03

-- timestamp -> datetime
select 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

Oracle

Oracle DML 需要手动提交或回滚事务
DML(Data Manipulation Language): 数据操纵语言 针对表数据的增删改查
Oracle select 查询必须有from 所以可以用from dual(这是一张神奇的表)

类型转换

date <–> varchar2 <–> number

date –> varchar2 : to_char(sysdate,’yyyy-mm-dd’)
varchar2 –> date : to_date(‘2020-02-02′,’yyyy-mm-dd’)

number –> varchar2: to_char(1111111.11,’999,999,999′) — 输出:1,111,111 使用’999,999,999’去匹配数字
varchar2 –> number :to_number(‘¥001,111,111′,’L000,000,000’) from dual; — 输出:1111111

L表示:当地的货币符号 字符串在运算时会自动隐式转换,含有非数字字符会报错:无效数字

参考资料

mysql和oracle的区别
Oracle| Oracle大小写敏感问题
SQL连接标准 SQL92\SQL99
MySQL 获得当前日期时间 函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/161238.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!