Oracle 数据库基础入门(一):搭建数据管理基石

news/2025/2/26 7:04:10

在当今数字化时代,数据库作为数据管理的核心工具,对于各类应用系统的开发至关重要。尤其是在 Java 全栈开发领域,掌握一款强大的数据库技术是必备技能。Oracle 数据库以其卓越的性能、高度的可靠性和丰富的功能,在企业级应用中广泛使用。开辟新的篇章,让我们踏上 Oracle 数据库的学习之旅,聚焦于基础的建表、数据操作等关键知识,为后续深入学习和实际项目应用筑牢根基。

一、DDL 数据定义语言:构建数据库结构框架

(一)建表语法:打造数据存储容器

在 Oracle 数据库中,使用Create table语句来创建表,这就好比在现实中搭建一个仓库,用于存放各类数据。其基本语法如下:

Create table 表的表名(
    Id 数据类型 【约束】,
    字段 数据类型【约束】,
    字段 数据类型【约束】,
   ........
);

这里的表的表名是你为这个数据仓库取的名字,方便后续识别和操作。Id及其他字段则是仓库中的一个个存储隔间,每个隔间有其特定的数据类型和约束条件。

(二)数据类型:定义字段存储格式

  1. 字符串类型
    • 在 Oracle 数据库中,charvarcharncharnvarchar2都用于表示字符串,但它们在存储方式和适用场景上有所不同。
    • charvarchar底层以字节为单位存储,这使得它们在存储英文和数字时效率较高。例如,存储用户名、密码等多为英文和数字组合的信息时较为合适。而ncharnvarchar2底层以字符为单位存储,对于中文汉字等双字节字符的存储更为友好,能确保字符的完整性和正确性。
    • charnchar是定长字符串,varcharnvarchar2是变长字符串。以Char(10)varchar(10)为例,Char(10)意味着数据库在划分存储空间时,无论该字段是否有内容,都会预留 10 个字节长度的空间。而Varchar(10)则更加灵活,它会根据字段实际内容的长度来划分空间,最长不超过 10 个字节。在实际应用中,如果字段内容长度较为固定,比如身份证号、固定格式的编号等,使用charnchar;若字段内容长度变化较大,如文章摘要、评论内容等,则选择varcharnvarchar2
  2. 数值类型Number类型用于存储数值。Number(5)表示该字段能存储的最大值为 99999,而Number(7)则能存储更大的数值,精确到小数点后两位时,最大值为 99999.99。在 Java 全栈开发中,涉及到金额计算、数量统计等场景时,合理使用Number类型能确保数据的准确性和精度。例如在电商系统中存储商品价格、库存数量等信息。
  3. 日期类型
    • Date类型用于存储精确到秒的日期和时间信息。在记录订单创建时间、用户注册时间等场景中经常使用。
    • Timestamp类型则更加精确,它能精确到秒后小数点后 9 位的数值,适用于对时间精度要求极高的场景,如金融交易时间记录、科学实验数据采集时间记录等。
  4. 二进制类型
    • Clob用于存储大文本,最大可以容纳 4G 的字符串。在存储长篇文章、大量的配置信息等场景中发挥重要作用。
    • Blob能存储最大 4G 的二进制数据,非常适合存储图片、视频、音频等多媒体文件。例如在一个在线教育平台中,课程视频、教师头像图片等就可以使用Blob类型存储在 Oracle 数据库中。

下面是一个创建students表的示例:

Create table students(
    Id number primary key,
    Stu_name nvarchar2(20),
    Age number(5)
);

在这个表中,Id字段作为主键,用于唯一标识每个学生记录,数据类型为numberStu_name字段用于存储学生姓名,采用nvarchar2类型,最多可存储 20 个字符,适合存储中文姓名;Age字段存储学生年龄,数据类型为number(5)

需要注意的是,在 Oracle 数据库语法中,表名和表的字段名不区分大小写。但为了代码的可读性和规范性,建议统一采用大写或小写的命名风格。

(三)改变语法:灵活调整表结构

  1. 向表中添加字段:当业务需求发生变化,需要在已有的表中增加新的信息存储隔间时,使用以下语句:
alter table 表的表名 add 新字段名 数据类型 [约束];

例如,在students表中添加一个Phone_number字段用于存储学生电话号码:

alter table students add Phone_number varchar2(11);
  1. 改表的字段数据类型:如果原有的字段数据类型不再满足业务需求,可进行修改:
alter table 表的表名 modify 字段名 新数据类型 [约束];

假设students表中的Age字段,最初设计为number(5),现在发现需要存储更精确的年龄信息,可修改为number(7,2)

alter table students modify Age number(7,2);
  1. 对表的字段重命名:当字段名称需要调整以更好地反映其含义时,使用:
alter table 表的表名 rename column 旧字段名 to 新字段名;

比如将students表中的Stu_name字段重命名为Student_name

alter table students rename column Stu_name to Student_name;

  1. 删除表中的字段:若某个字段不再使用,可将其从表中删除:
alter table 表的表名 drop column 字段名;

例如删除students表中新增的Phone_number字段:

alter table students drop column Phone_number;

(四)删表语法:清理不再使用的表

当一个表不再有存在的价值,需要删除其结构和数据时,使用drop table语句

drop table 表的表名 [cascade constraints];

这里的cascade constraints表示级联删除。如果该表与其他表存在外键约束等关联关系,使用cascade constraints可以一并删除这些关联约束,避免因表删除导致的约束冲突。但要注意,删除表结构的同时,表中的所有数据也会被永久删除。例如删除teacher表:

drop table teacher;

二、DML 数据操作语言:对数据库进行数据增删改

(一)新增数据:向表中填充信息

使用Insert into语句向表中插入新的数据记录,就像向仓库中放入新的物品。其语法为:

Insert into 表的名字(字段列表)values(值的列表);

例如,向students表中插入学生信息:

Insert into students(id,student_name)values(1,'cxk');
Insert into students(id,student_name,student_no)values(2,'lyf','CDXY2024110001');
Insert into students(id,student_name,student_no)values(3,'yjy','CDXY2024110002');

在 Java 全栈开发中,当用户在前端页面提交注册信息、添加商品信息等操作时,后端 Java 代码通过数据库连接,使用类似的Insert into语句将数据插入到 Oracle 数据库

(二)修改数据:更新表中的已有信息

通过Update语句对表中的数据进行修改,语法如下:

Update 表的表名 set 字段=值,字段=值,[where 筛选条件];

例如,修改students表中id为 3 的学生信息:

Update students set student_name ='lyf',student_no = 'CDXY2024110001'  where id = 3;

这里的where筛选条件至关重要,它指定了具体要修改哪些记录。如果不写where条件,那么表中的所有记录都会被修改,这可能会导致严重的数据错误。在实际项目中,比如在电商系统中修改商品价格、库存数量等操作,就需要准确使用where条件来定位要修改的具体商品记录。

(三)删除数据:移除表中的无用信息

  1. 使用delete语句:语法为delete from 表的表名 [where 筛选条件];,例如删除students表中id为 1 的学生记录:
delete from students where id = 1;

delete语句在删除数据时,采用逐行删除模式,并且会将删除操作记录到undo.log日志中。这意味着数据库管理员(DBA)在必要时可以通过日志进行数据恢复。
        2. 使用truncate语句:语法为truncate table 表的表名;truncate删除数据属于重置性删除,它会直接清空表中的数据,速度比delete快很多,但无法恢复数据。在一些场景中,比如在测试环境中需要快速清空表数据重新进行测试时,使用truncate较为合适;而在生产环境中,对于一些需要谨慎操作的数据删除更倾向于使用delete语句以便在出现误操作时有恢复的可能。

三、未来在企业工作的小技巧

  1. 数据类型选择的重要性:在企业级项目中,数据量往往非常庞大。合理选择数据类型不仅能提高数据库的存储效率,还能提升查询和操作数据的性能。例如,对于固定长度且数据量较大的字段,如员工编号,使用char类型虽然会占用较多存储空间,但在查询时可能会比varchar类型更高效,因为数据库无需额外处理变长带来的开销。在设计数据库表结构时,要充分考虑业务需求和数据特点,与团队中的数据分析师、后端开发人员充分沟通,共同确定最优的数据类型方案。
  2. 数据操作的事务管理:在 Java 全栈开发中,涉及到数据库的增删改操作时,要善于使用事务管理。事务可以确保一组数据库操作要么全部成功执行,要么全部失败回滚。例如,在一个涉及订单创建和库存减少的业务场景中,这两个操作应该放在同一个事务中。如果订单创建成功但库存减少失败,事务回滚可以避免数据不一致的情况。在 Java 中,可以使用 Spring 框架的事务管理机制,通过注解或编程方式来管理事务,确保数据的完整性和一致性。
  3. 备份与恢复策略:了解deletetruncate的区别,在实际工作中合理运用。对于重要数据的删除操作,优先考虑使用delete语句,并结合数据库的备份策略。企业级数据库通常会定期进行全量备份和增量备份,在执行delete操作前,要确保备份是最新的,以便在需要时能够恢复数据。同时,定期对备份数据进行恢复测试,确保备份的有效性,防止在真正需要恢复数据时出现问题。

通过对 Oracle 数据库 DDL 和 DML 语言的学习,我们已经掌握了 Oracle 数据库基础操作的核心技能。在后续的学习中,我们将继续探索 Oracle 数据库的更多高级特性,不断提升在数据库管理和开发方面的能力,为未来在企业级项目中的应用打下坚实基础。


http://www.niftyadmin.cn/n/5868270.html

相关文章

DeepSeek开源周 Day02:从DeepEP开源趋势重新审视大模型Infra

DeepEP 今天DeepSeek开源周第二天,开放了DeepEP仓库,属实看了下源码,和昨天FlashMLA一样,C权重(包括CUDA)还是占据了绝对部分,作为调包侠的我,看到之后望而却步,想看原理…

欧拉回路与哈密尔顿回路: Fleury算法与Hierholzer 算法(C++)

图论中的回路是指一个路径, 它从某个顶点开始, 经过所有边恰好一次, 并回到起始顶点. 定义 欧拉回路: 从一个顶点出发, 经过每条边恰好一次, 并且最终回到起始顶点. 哈密尔顿回路: 从一个顶点出发, 经过每个顶点恰好一次, 并且最终回到起始顶点. 欧拉路径: 从一个顶点出发, …

[实现Rpc] 测试 | rpc部分功能联调 | debug | 理解bind

目录 服务端 客户端 Debug 运行 总结 服务端 调用 on Request 对请求做出回应 on 对...做处理 #include "../../common/net.hpp" #include "../../common/message.hpp" #include "../../common/dispatcher.hpp" #include "../../se…

Node.js 内置模块简介(带示例)

目录 1. fs(文件系统)模块 2. http 模块 3. path 模块 4. os 模块 5. events 模块 6. crypto 模块 1. fs(文件系统)模块 fs 模块提供了与文件系统进行交互的功能,包括文件的读写、删除、重命名等操作。它有同步…

安装VM和Centos

安装VM 一、打开虚拟机 二、选择典型 三、选择光盘 四、指定虚拟机位置 五、设置磁盘大小并拆分为多个文件 六、完成 安装Centos 一、上述过程完成后我们直接打开虚拟机 二、语言选择中文 三、默认安装位置并点击完成 四、点击开始安装 五、点击设置密码 设置完密码后点击完成…

Qt基础之四十九:Qt属性系统(Property System)

Qt提供了一个复杂的属性系统,类似于一些编译器供应商提供的属性系统。然而,作为一个独立于编译器和平台的库,Qt不依赖于__property或[property]等非标准编译器功能。Qt解决方案适用于Qt支持的每个平台上的任何标准C++编译器。它基于元对象系统(Meta-Object System),该系统…

1.介绍一下TCP/IP模型和OSI模型的区别【中高频】

OSI模型 将 这个协议 划分为7个不同的层级,分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型只有4个层级,分别为网络接口层、网络层、传输层和应用层,其中应用层在用户态,传输层及以下…

Java 中 ArrayList 和 LinkedList 的区别及使用场景

文章目录 Java 中 ArrayList 和 LinkedList 的区别及使用场景1. 底层数据结构ArrayListLinkedList 2. 性能对比2.1 访问元素(随机访问)2.2 插入和删除元素2.3 内存占用 3. 使用场景适合使用 ArrayList 的场景适合使用 LinkedList 的场景 4. 代码示例Arra…