导航:
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
目录
一、基本区别
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关键字分页
下面场景下适用于选择Oracle:
| 标准 | RDBMS | OODBMS |
|---|---|---|
| 缩写含义 | 关系数据库管理系统 | 面型对象数据库管理系统 |
| 数据存储方式 | 数据存储在实体里面,以包含特定信息的表格的形式存在 | 数据存储在对象中 |
| 数据复杂性 | 处理比较简单的数据 | 比 RDBMS 处理更大且更复杂的数据 |
| 分组 | 拥有公共定义的实体集合的不同实体类型 | 用类描述拥有公共的关系、行为和相似的属性的一组对象 |
| 数据处理 | RDBMS 只存储数据 | 存储数据以及方法 |
| 主要目标 | 数据独立于应用程序 | 数据封装 |
| 主键 | 主键可以明显的标识表中的对象 | 对象标识符 (object identifier, OID) 对于任何一个对象和实体都是明确且持久的 |
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权限,建表需要分配限额
MySQL修改密码:
1. win+r快捷键,输入cmd进入命令行:
cmd 
2.登录MySQL
mysql -u用户名 -p密码 3.修改MySQL的root用户密码
set password for 用户名@localhost = password('新密码') 示例:
#将用户root的密码更改为hello; set password for root@localhost = password('hello'); Oracle修改密码:
1.win+r快捷键,输入cmd进入命令行:
cmd 
2.sqlplus进入Oracle命令行:
sqlplus 3.输入用户名密码登录;
4.修改密码:
ALTER USER 用户名 IDENTIFIED BY 新密码; 示例:

Oracle 在多次输错密码的情况下,会锁定该账户,导致无法登录数据库。
查看被锁定的账号:
SELECT username, account_status FROM dba_users WHERE account_status LIKE '%LOCKED%'; 解锁账号:
ALTER USER 用户名 ACCOUNT UNLOCK; 恢复密码:
ALTER USER 用户名 IDENTIFIED BY 新密码 ACCOUNT UNLOCK; 示例:解锁system用户:
-- 解锁。用户名不用引号 ALTER USER SYSTEM ACCOUNT UNLOCK; -- 设置密码 ALTER USER SYSTEM IDENTIFIED BY SYSTEM ACCOUNT UNLOCK;
1.开启自动内存管理Automatic Memory Management(AMM)
Oracle开启AMM后,会根据当前系统的内存情况动态地分配内存,直到达到指定的最大值。当系统需要更多内存时,AMM会自动减少内存使用量。
ALTER SYSTEM SET MEMORY_TARGET=2GB,SCOPE=SPFILE; AMM还可以设置max_memory_target参数,以控制最大内存使用:
ALTER SYSTEM SET MEMORY_MAX_TARGET=3GB,SCOPE=SPFILE; 2.开启自动共享内存管理Automatic Shared Memory Management(ASMM)
ASMM会自动检测当前系统的内存使用情况,并根据需求分配和释放共享内存区域。
与AMM不同,ASMM只处理共享池、缓冲区高速缓存、Java池和辅助预留区的共享内存。
ALTER SYSTEM SET SGA_TARGET=1024M; ALTER SYSTEM SET SGA_MAX_SIZE=2048M; 是Oracle大小写不敏感的前提条件是在没有使用双引号 "" 的前提下(表名、字段名)
CREATE TABLE "TableName"("id" number); // 如果创建表的时候是这样写的,那么就必须严格区分大小写 SELECT * FROM "TableName"; // 不仅要区分大小写而且要加双引号,以便和上面的第三种查询方式区分开
Oracle默认是大写,对字段的具体值是敏感的
大小写不敏感(关键字和字段名都不区分)
阿里巴巴Java开发手册,在MySQL建表规约里有:
【强制】表名、字段名必须使用小写字母或数字 , 禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑
Windows 大小写不敏感,文件名同名大小写不同会覆盖
MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免节外生枝
MySQL 的字段 大小写都可以查到
对于常见的时间格式: "2021-02-03 16:25:48"
"yyyy-MM-dd HH:mm;ss" 'yyyy-mm-dd hh24:mi:ss' 示例-Java:
// 定义日期格式 String inputPattern = "yyyy-MM-dd HH:mm:ss"; String outputPattern = "yyyy-MM-dd HH:mm:ss"; // 待格式化的日期字符串 String inputDateStr = "2021-02-03 16:25:48"; try { // 将待格式化的日期字符串解析为 Date 对象 SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern); Date date = inputFormat.parse(inputDateStr); // 创建目标日期格式 SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern); // 格式化日期 String outputDateStr = outputFormat.format(date); // 打印格式化后的日期 System.out.println("Formatted Date: " + outputDateStr); } catch (Exception e) { e.printStackTrace(); }
示例-Oracle:
SELECT TO_CHAR(date, 'yyyy-mm-dd hh24:mi:ss') AS formatted_date FROM your_table;
-- 获取当前时间戳 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 sqlplus:
创建表空间
create tablespace 表空间名称 logging datafile '路径\名称.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local; 示例:
create tablespace NWZC logging datafile 'D:\javautils\oracle1\oradata\ORCL\zuigaofa.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local;
创建用户
create user 用户名 identified by 密码 default tablespace 表空间名;
修改用户默认表空间:
alter user 用户名 default tablespace 表空间名 示例:
alter database default tablespace NWZC;
授权
grant exp_full_database to 用户名 ; grant imp_full_database to 用户名 ; grant resource to 用户名 ; grant connect to 用户名 ; grant dba to 用户名 ; 示例:
grant exp_full_database to NWZC; grant imp_full_database to NWZC; grant resource to NWZC; grant connect to NWZC; grant dba to NWZC;
-- 查询数据库 SHOW DATABASES; -- 创建数据库 CREATE DATABASE 数据库名称; -- 创建数据库(判断,如果不存在则创建) CREATE DATABASE IF NOT EXISTS 数据库名称; -- 查看当前使用的数据库 SELECT DATABASE(); -- 使用数据库 USE 数据库名称; Oracle临时表默认所有会话内可见,一旦创建就会存在,直到显式删除。可以设置临时表仅在当前会话内或事务内可见。
CREATE GLOBAL TEMPORARY TABLE temp_table ( id NUMBER, name VARCHAR2(50) ) ON COMMIT DELETE ROWS; ON COMMIT DELETE ROWS指定了当事务提交时,临时表中的所有行都会被删除。这保证了当会话结束时,所有临时数据都会被清除。
设置临时表消失的时机:
临时表中数据的增删改查,跟普通表一致:
Insert into tmp_gttable (id,name) values(1,'test'); Update tmp_gttable set name = 'test_update' where id = 1; Delete from tmp_gttable where id = 1; MySQL临时表只在当前会话可见,一旦会话关闭,临时表会自动删除。
CREATE TEMPORARY TABLE 表名 (字段列表); 示例如下:
CREATE TEMPORARY TABLE tmp_table ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB; 临时表创建成功后,可以使用SELECT、INSERT、UPDATE、DELETE等语句对其进行操作,与普通表的语法相同。
1、删除无任何数据对象的表空间:
drop tablespace xxx 2、删除有任何数据对象的表空间
drop tablespace xxx including contents and datafiles; -- 删除数据库 DROP DATABASE 数据库名称; -- 删除数据库(判断,如果存在则删除) DROP DATABASE IF EXISTS 数据库名称; 1.首先确保dmp版本和本地oracle版本一致
2.将需要导入的dmp文件放在oracle11g的安装目录里面的./admin/orcl/dpdump目录下面

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

3.sqlplus:用system账号创建用户并授权
create user ZHANGSAN identified by 1234; grant connect , dba to ZHANGSAN ; grant resource to ZHANGSAN ; grant imp_full_database to ZHANGSAN ; grant exp_full_database to ZHANGSAN ; 4.cmd命令行:迁移
impdp ZHANGSAN/1234 dumpfile = XXX.dmp 
直接用navicat转储和运行SQL文件即可:

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默认不自动提交,需要用户手动提交,提交可以通过以下几个命令实现:
示例:
BEGIN SAVEPOINT sp; -- 向学生表插入数据 INSERT INTO student_table (student_name, student_age) VALUES ('John', 18); INSERT INTO student_table (student_name, student_age) VALUES ('Emma', 19); -- 向班级表插入数据 INSERT INTO class_table (class_name, class_size) VALUES ('Class A', 30); INSERT INTO class_table (class_name, class_size) VALUES ('Class B', 28); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK TO sp; RAISE; END; 查看事务提交状态
SHOW STATUS LIKE 'Innodb_trx_id' 关闭事务提交:
set AutoCommit = 0; 手动提交事务:
START TRANSACTION; -- 开始事务 INSERT INTO student (name,age) VALUES ('Tom',18); -- 执行一些数据操作 INSERT INTO score (student_id,score) VALUES (1,90); COMMIT; -- 手动提交事务 -- 利用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; -- 记录从0开始 -- 从第0条开始,取5条数据 select * from test2 order by sid desc limit 0,5