Oracle数据库对比mysql
2022/4/7 19:18:58
本文主要是介绍Oracle数据库对比mysql,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基本
oracle默认端口:1521 默认用户:system
mysql默认端口:3306 默认用户:root
连接oracle:
sqlplus
-- 输入用户名
-- 输入密码
-- 查询该用户的表 select TABLE_NAME from user_tables;
连接mysql:
mysql -u root -p
-- 输入密码
-- 查询所有数据库 show databases;
-- 切换到 "test" 这个数据库 use test;
-- 查询该数据库所有表 show tables;
注意:Oracle 登录需要授予登录用户 session权限,建表需要分配表空间
eg授予权限:grant create 权限名:session、table、sequence、view、procedure线程
分配表空间:alter user 用户名 quota unlimited--大小 on users
常用字段类型
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表示:当地的货币符号 字符串在运算时会自动隐式转换,含有非数字字符会报错:无效数字
这篇关于Oracle数据库对比mysql的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程