Oracle数据库快速入门
前言:
我想现在很多人的入门数据库都是mysql,但是由于工作中会接触到Oracle数据库,如果你有MySQL的基础的话,这篇文章能让你很快掌握Oracle。
目录
1.体系结构
2.创建用户和表空间
2.1.创建表空间
2.2.创建用户
3.数据类型
4.表操作
4.1.创建表
4.2.修改表结构
5.数据操作
5.1.数据增删改查
5.2.分组查询
6.创建索引
1.体系结构
我相信在还没有接触到Oracle数据库之前,会听到很多五花八门的关于Oracle特点的介绍。其实在架构上来说Oracle最大的特点就是围绕用户,以用户为单位,做了严格的资源权限的控制和隔离。以下是架构图,如果很复杂不要担心,简单理解为用户到表空间到表的一对多关系即可。
注意:Oracle中其实没有库这种概念,而是用户对应表空间,表空间中存放表。

用户:
在mysql中我们说一个库里有多少张表,是因为MySQL体系中库是管理表的单位。
而在Oracle里,我们说一个用户下有多少张表,是因为一个库里面还用用户做了隔离,不同的用户对不同的表拥有访问权限。
表空间:
可以理解为拿来装某一个库里面的所有内容的存储区域。在 Oracle 数据库中,表空间是一种逻辑存储结构,它是由一个或多个数据文件组成的,用于存储数据库对象(如表、索引、分区等)。Oracle 数据库中的每个对象都存储在表空间中,而且每个表空间只属于一个数据库。
一个表空间可以包含多个数据文件,这些文件可以位于同一个磁盘上,也可以位于不同的磁盘上,甚至可以位于不同的服务器上。因此,通过使用表空间,Oracle 数据库可以将数据分散在多个磁盘上,提高了存储的灵活性和可靠性。
数据文件:
数据文件位于表空间中,里面存储的是数据,一个表空间可以由一个或者多个数据文件组成,但是一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件了,如果要删除只能先删除其所属的表空间。
2.创建用户和表空间
2.1.创建表空间
创建表空间必须使用有超级管理员权限的用户来操作。
create tablespace <space_name> --指定表空间文件的存放路径和名称 datafile 'C:\<spacen_name>.dbf' //指定表空间文件的大小 size 100m --指定超出空间后每次扩展的大小 autoextend on next 10m;
2.2.创建用户
create user <username> identified by <password> default tablespace <space_name>
创建出来的用户需要授权,否则不能登录,因为根本就不知道你能访问哪些表。
常用角色有如下:
-
connect,连接角色,最基本的角色
-
resource,开发者角色
-
dba,超级管理员角色
给用户授权:
grant dba to <username>
3.数据类型
Oracle数据类型分为四类:字符串、数字、日期、大对象
| 数据类型 | 描述 |
|---|---|
| varchar、varchar2 | 表示可变长度的符串,常用的是varchar2,因为varchar会自动填充,而varchar2不会。 |
| number | number(n)表示长度为n的整数。number(m,n)表示总长度为m,小数部分长度是n |
| data | 日期类型 |
| clob | 大对象,大文本数据类型,单字节可达4G |
| blob | 大对象,二进制数据,单字节可达4G |
4.表操作
4.1.创建表
CREATE TABLE person (id NUMBER(10) PRIMARY KEY,name VARCHAR2(50),age NUMBER(3),gender VARCHAR2(10) );
4.2.修改表结构
--添加一个字段 alter table 表名 add 字段名 字段类型; --修改字段类型 alter table 表名 modify 字段名 字段类型; --修改字段名称 alter table 表名 rename column 原字段名 to 新字段名; --删除字段
5.数据操作
5.1.数据增删改查
基础增删改查
INSERT INTO employees (employee_id, first_name, last_name, hire_date, department_id)
VALUES (101, 'John', 'Doe', TO_DATE('2023-08-21', 'YYYY-MM-DD'), 10);UPDATE employees
SET first_name = 'Jane'
WHERE employee_id = 101;
DELETE FROM employees
WHERE employee_id = 101;
SELECT first_name, last_name, job_title
FROM employees;
连表查询
SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.location_id = 1700;
5.2.分组查询
在group by的时候只有group by的字段才能被单独展示,没有被group by的字段只能用上诸如求和、求平均值等聚合函数才会显示。
举个例,假设有一个名为sales的表,其中包含销售数据,想按照产品类别进行分组并计算每个类别的销售总额:
SELECT product_category, SUM(sales_amount) AS total_sales FROM sales GROUP BY product_category;
Oracle的分组查询里值得注意的是开窗函数。
开窗函数顾名思义就是再开一个窗子,即再开一列,再开的这一列的数据来自于各个分组内部统计得出。
如计算每个部门总的薪水:
create table t(id number,deptno number,name varchar2(20),sal number); insert into t values(1,1,'1aa',120); insert into t values(2,1,'2aa',300); insert into t values(3,1,'3aa',100); insert into t values(4,1,'4aa',99); insert into t values(5,1,'5aa',90); insert into t values(6,2,'6aa',87); insert into t values(7,2,'7aa',500); insert into t values(8,2,'8aa',200); insert into t values(9,2,'9aa',20); insert into t values(10,2,'10aa',30);
select t.*,sum(sal)over(partition by deptno order by sal desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as last_value from t t;
再如计算每个用户最早和最晚的订单:
SELECT customer_id,first_value(order_date) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as first_order_date,first_value(amount) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as first_order_amount,last_value(order_date) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as last_order_date,last_value(amount) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as last_order_amount FROM order_details;
常用的开窗函数有:
-
ROW_NUMBER: 为每一行分配一个唯一的整数编号。
-
RANK, DENSE_RANK: 根据指定的排序规则计算每个行的排名。其中,RANK函数在相同的值存在时可能会跳过某些排名,而DENSE_RANK函数不会跳过任何排名。
-
NTILE(n): 将查询结果集分为n个等分,并为每个行分配一个对应的数字。
-
LAG, LEAD: 分别返回指定列在当前行之前或之后的值。可以使用LAG或LEAD函数来计算时间序列数据的移动平均数或计算相邻行之间的差异等等。
-
FIRST_VALUE, LAST_VALUE: 分别返回指定列的第一个值和最后一个值。
-
SUM, AVG, COUNT等聚合函数: 可以和 OVER 子句一起使用来计算每个行的聚合值,如行总数、行平均数等等。
6.创建索引
创建单列索引
CREATE INDEX idx_employee_last_name ON employees(last_name);
创建唯一索引
CREATE UNIQUE INDEX idx_employee_email ON employees(email);
创建组合索引
CREATE INDEX idx_employee_name_dept ON employees(last_name, department_id);
相关文章:
Oracle数据库快速入门
前言: 我想现在很多人的入门数据库都是mysql,但是由于工作中会接触到Oracle数据库,如果你有MySQL的基础的话,这篇文章能让你很快掌握Oracle。 目录 1.体系结构 2.创建用户和表空间 2.1.创建表空间 2.2.创建用户 3.数据类型…...
Linux内核学习(十)—— 块 I/O 层(基于Linux 2.6内核)
目录 一、剖析一个块设备 二、缓冲区和缓冲区头 三、bio 结构体 四、请求队列 五、I/O 调度程序 系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的硬件设备称作块设备,这些固定大小的数据片就称作块。最…...
SpringMVC 写个 HelloWorld
文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…...
ARM--day7(cortex_M4核LED实验流程、异常源、异常处理模式、异常向量表、异常处理流程、软中断编程、cortex_A7核中断实验)
软中断代码:(keil软件) .text .global _start _start:1.构建异常向量表b resetb undef_interruptb software_interruptb prefetch_dataabortb data_abortb .b irqb fiq reset:2.系统一上电,程序运行在SVC模式1>>初始化SVC模…...
Java中LinkList的基本介绍和细节讨论。双向链表的代码和LinkList的源码。LinkList和ArrayList的比较与选择。
LinkedList 是 Java 中的一个双向链表实现的类,它实现了 List 接口,同时也实现了 Deque 接口,因此可以用作列表、队列或双端队列。下面是关于 LinkedList 的基本介绍和细节讨论: 基本介绍: LinkedList 是一个双向链表…...
Proteus软件安装包分享(附安装教程)
目录 一、软件简介 二、软件下载 一、软件简介 Proteus软件是一款电路设计和仿真的综合性软件,由Labcenter公司开发。它提供了一个交互式的图形界面,用户可以在其中构建电路、仿真结果并实时观察仿真结果。 1、Proteus的历史和演变 Proteus软件最初于…...
“图为科技——什么是边缘计算“
边缘计算是一种新兴的计算模式,它将计算资源和服务推向离终端设备更近的地方。以往,计算任务大多集中在云端进行,但随着物联网和移动互联网的快速发展,边缘计算应运而生。 边缘计算的核心思想是将计算、存储和网络功能部署在离终端…...
SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件。它就是Spring Cloud Config。 一、简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需…...
mysql 错误码
一、 #22001 Caused by: java.sql.BatchUpdateException: Data truncation: #22001检查一下数据库表字段,特别是VARCHAR的长度是否够。 Caused by: java.sql.BatchUpdateException: #HY000检查是不是违反了非空约束,NOT NULL字段有没有没传的 二、...
HTML的form表单标签详解~
通过HTML提交表单数据有web中是非常常用的操作,所以有必要详细、仔细学习了解HTML的form表单。 目录 01-关键词 novalidate 是什么意思?02- action"" 是什么意思?03- enctype"multipart/form-data" 是什么意思࿱…...
Kafka 消费者“group_name”组正在永远重新平衡
目录 一、场景1.1、场景应用环境1.2、 问题重现二、问题分析三、解决方案一、场景 1.1、场景应用环境 卡夫卡:2.11-1.0.1。主题:并发度为 5 且分区为 5 。1.2、 问题重现 当应用程序重新启动并且在分区分配之前在主题上发布消息时,主题的 5 个消费者找到组协调器并向组协调…...
高并发编程-3. Amdahl(阿姆达尔)定律与Gustafson定律
此文章为笔记,为阅读其他文章的感受、补充、记录、练习、汇总,非原创,感谢每个知识分享者。 前言 有关为什么要使用并行程序的问题前面已经进行了简单的探讨。总的来说,最重要的应该是处于两个目的。 第一,为了获得更…...
ffmpeg之常用的命令行参数
FFmpeg是一套可以用来转换数字音频、视频的开源代码工程,能够编译出SDK(库)和命令行工具。用户可以使用SDK开发程序实现音视频的操作,也可以使用命令行工具ffmpeg实现音视频的操作。 一、常用参数 -i inputfile 指定输入文件 -s…...
tomcat服务器
tomcat下载安装 1、认识tomcat服务器 tomcat用来管理web应用,叫应用服务器,tomcat本身也是java工程 为什么要使用tomcat 为了达到资源共享。 在静态web,俩种访问方式 一种是找到文件的磁盘路径,一种是直接点击右上角的浏览器图标 直接点击…...
【面试题】MVC、MVP与MVVM模式是什么?
MVC模式 MVC是应用最广泛的软件架构之一,一般MVC分为: Model( 模型 )、Controller( 控制器 )、View( 视图 )。 这主要是基于分层的目的,让彼此的职责分开。View 一般…...
网络安全02-C段扫描、开放端口
查询网站IP https://seo.chinaz.com/hetianlab.com 扫描指定IP:例:nmap -A -T4 ww.hetianlab.com -oX out.html 扫描指定段:例:nmap -O -Pn -A 192.168.113.1-200 扫描整个C段:例:nmap -O -Pn -A 192.168.…...
vscode流程图插件使用
vscode流程图插件使用 1.在vscode中点击左下角设置然后选择扩展。 2.在扩展中搜索Draw.io Integration,安装上面第一个插件。 3.安装插件后在工程中创建一个后缀为drawio的文件并且双击打开即可绘制流程图...
mysql数据导入导出参数说明
一、使用into outfile和load data infile导入导出备份数据 这种方法的好处是导出的数据格式可以自己规定,并且导出的是纯数据,不含建表信息。 1.into outfile导出 SELECT * FROM metadatakeys INTO OUTFILE D:/outfile.txt FIELDS TERMINATED BY | E…...
Qt——QLineEdit控件常见的属性、方法和信号
QLineEdit控件常见的属性、方法和信号 一、QLineEdit控件常见属性和方法 二、QLineEdit控件常见信号 QLineEdit:单行文本输入框控件 一、QLineEdit控件常用属性和方法: 1. text: 描述:获取或设置文本框中的文本内容。 用法&…...
C语言:指针和数组(看完拿捏指针和数组)
目录 数组名的理解: 一维数组: 解析: 字符数组: 解析: 解析: 字符串数组: 解析: 解析: 一级指针: 解析: 解析: 二维数组&a…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
Web APIS Day01
1.声明变量const优先 那为什么一开始前面就不能用const呢,接下来看几个例子: 下面这张为什么可以用const呢?因为复杂数据的引用地址没变,数组还是数组,只是添加了个元素,本质没变,所以可以用con…...
数据可视化交互
目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 一、安装 pyecharts 二、下载数据 三、实验任务 实验 1:AQI 横向对比条形图 代码说明: 运行结果: 实验 2:AQI 等级分布饼图 实验 3:多城市 AQI…...
Xcode 16.2 版本 pod init 报错
Xcode 版本升级到 16.2 后,项目执行 pod init 报错; ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchron…...
