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…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...

ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...