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
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;
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:92语法:可以内连接,外连接99语法:可以内连接,外连接,全外连接(full join)
-- SQL92 左外连接(保留左边, 注意(+)要放在右边,记忆:左外,右边会出现空行要+补齐) where e.department_id = d.department_id(+) --
MySQL:只支持内连接、外连接,并且只能用类似oracle中99语法的格式写,MySQL不完全符合SQL-92规范
大小写不敏感(关键字和字段名都不区分)
阿里巴巴Java开发手册,在MySQL建表规约里有:
【强制】表名、字段名必须使用小写字母或数字 , 禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑
Windows 大小写不敏感,文件名同名大小写不同会覆盖
MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免节外生枝
MySQL 的字段 大小写都可以查到
是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
Java中常用的 "yyyy-MM-dd mm:HH;ss" -> "2021-02-03 16:25:48"
在 Oracle 中的表示方式:'yyyy-mm-dd hh24:mi:ss'
-- 获取当前时间戳 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 DML 需要手动提交或回滚事务
DML(Data Manipulation Language): 数据操纵语言 针对表数据的增删改查
Oracle select 查询必须有from 所以可以用from dual(这是一张神奇的表)
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表示:当地的货币符号 字符串在运算时会自动隐式转换,含有非数字字符会报错:无效数字