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…...
【粉丝福利社】三维重建技术与实践:基于NeRF与3DGS
💎【行业认证权威头衔】 ✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋&am…...
嵌入式视觉成本降至百元级:技术民主化如何重塑工业物联网应用
1. 工业物联网与嵌入式视觉:从昂贵壁垒到百元级应用的演进 提到物联网,很多人脑子里蹦出来的可能是家里的智能音箱、手腕上的健康手环,或者能远程控制的冰箱。没错,消费和医疗领域确实是物联网最显眼的舞台。但作为一名在工业自动…...
深入USB总线:图解移远EC20在Linux下如何从硬件接口到虚拟出5个ttyUSB
深入USB总线:图解移远EC20在Linux下如何从硬件接口到虚拟出5个ttyUSB 当我们拆解一台嵌入式设备时,常会遇到4G模块这类看似独立却又深度集成的组件。以移远EC20为例,它表面上通过MiniPCIE接口与主机通信,实则内部隐藏着一套复杂的…...
从零解构:BUUCTF“吹着贝斯扫二维码”中的隐写与编码链
1. 题目背景与核心挑战 第一次看到BUUCTF这道"吹着贝斯扫二维码"的题目时,我盯着那堆杂乱的文件陷入了沉思。这道题完美展现了CTF比赛中典型的"隐写多层编码"组合拳——就像侦探破案需要同时处理物证和密码本。题目给出的初始材料是一个加密的f…...
保姆级教程:在Win10上用VS2022搞定TensorRT 8.5.2.2(含zlibwapi.dll缺失等常见坑点)
从零到一:Windows 10 VS2022 深度集成 TensorRT 8.5 全流程实战 TensorRT 作为 NVIDIA 推出的高性能深度学习推理引擎,能够显著提升模型在 NVIDIA GPU 上的执行效率。但对于 Windows 平台的新手开发者来说,从环境配置到第一个示例程序成功运…...
OpenHarmony移植实战:解决ACE组件编译依赖冲突的通用方案
1. OpenHarmony移植中的ACE组件依赖问题解析 最近在将OpenHarmony移植到全志T113平台时,遇到了一个典型问题:添加ACE组件后编译报错,提示找不到海思芯片相关的硬件抽象层文件。这个问题其实反映了OpenHarmony生态发展过程中的一个普遍现象—…...
终极指南:Shoelace如何利用Shadow DOM实现完美样式隔离
终极指南:Shoelace如何利用Shadow DOM实现完美样式隔离 【免费下载链接】shoelace Shoelace is now Web Awesome. Come see what’s new! 项目地址: https://gitcode.com/gh_mirrors/sh/shoelace Shoelace(现已更名为Web Awesome)作为…...
AI大模型赋能数据治理:小白也能掌握的5个高频场景与避坑指南(收藏备用)
数据治理是企业数字化转型难题,AI大模型带来破局点。本文阐述大模型如何解决效率低、门槛高、适配弱等痛点,提供3个高价值落地场景(非结构化数据治理、数据质量治理、数据资产化治理)及5个高频踩坑陷阱,并给出最佳实践…...
Cortex-R52性能监控与调试架构深度解析
1. Cortex-R52性能监控单元架构解析在嵌入式实时系统中,性能监控单元(PMU)如同汽车的仪表盘,为开发者提供处理器内部运行状态的实时数据。Cortex-R52的PMU模块采用三级监控架构:1.1 事件采集层处理器内部部署了45个专用硬件计数器,…...
【DSP学习】外部中断实验-基于普中DSP28335开发攻略
参考材料 普中DSP28335开发攻略 一、外部中断配置 1 失能 CPU 级中断,并初始化 PIE 控制器寄存器和 PIE 中断向量表在前面学习中断章节中,我们知道 F28335 的外设中断需通过 PIE 控制器来管理,因此需要初始化 PIE 相应的寄存器和中断向量表。…...
