在当今数字化时代,数据库作为数据管理的核心工具,对于各类应用系统的开发至关重要。尤其是在 Java 全栈开发领域,掌握一款强大的数据库技术是必备技能。Oracle 数据库以其卓越的性能、高度的可靠性和丰富的功能,在企业级应用中广泛使用。开辟新的篇章,让我们踏上 Oracle 数据库的学习之旅,聚焦于基础的建表、数据操作等关键知识,为后续深入学习和实际项目应用筑牢根基。
一、DDL 数据定义语言:构建数据库结构框架
(一)建表语法:打造数据存储容器
在 Oracle 数据库中,使用Create table
语句来创建表,这就好比在现实中搭建一个仓库,用于存放各类数据。其基本语法如下:
Create table 表的表名(
Id 数据类型 【约束】,
字段 数据类型【约束】,
字段 数据类型【约束】,
........
);
这里的表的表名
是你为这个数据仓库取的名字,方便后续识别和操作。Id
及其他字段则是仓库中的一个个存储隔间,每个隔间有其特定的数据类型和约束条件。
(二)数据类型:定义字段存储格式
- 字符串类型
- 在 Oracle 数据库中,
char
、varchar
、nchar
、nvarchar2
都用于表示字符串,但它们在存储方式和适用场景上有所不同。 char
和varchar
底层以字节为单位存储,这使得它们在存储英文和数字时效率较高。例如,存储用户名、密码等多为英文和数字组合的信息时较为合适。而nchar
和nvarchar2
底层以字符为单位存储,对于中文汉字等双字节字符的存储更为友好,能确保字符的完整性和正确性。char
和nchar
是定长字符串,varchar
和nvarchar2
是变长字符串。以Char(10)
和varchar(10)
为例,Char(10)
意味着数据库在划分存储空间时,无论该字段是否有内容,都会预留 10 个字节长度的空间。而Varchar(10)
则更加灵活,它会根据字段实际内容的长度来划分空间,最长不超过 10 个字节。在实际应用中,如果字段内容长度较为固定,比如身份证号、固定格式的编号等,使用char
或nchar
;若字段内容长度变化较大,如文章摘要、评论内容等,则选择varchar
或nvarchar2
。
- 在 Oracle 数据库中,
- 数值类型:
Number
类型用于存储数值。Number(5)
表示该字段能存储的最大值为 99999,而Number(7)
则能存储更大的数值,精确到小数点后两位时,最大值为 99999.99。在 Java 全栈开发中,涉及到金额计算、数量统计等场景时,合理使用Number
类型能确保数据的准确性和精度。例如在电商系统中存储商品价格、库存数量等信息。 - 日期类型
Date
类型用于存储精确到秒的日期和时间信息。在记录订单创建时间、用户注册时间等场景中经常使用。Timestamp
类型则更加精确,它能精确到秒后小数点后 9 位的数值,适用于对时间精度要求极高的场景,如金融交易时间记录、科学实验数据采集时间记录等。
- 二进制类型
Clob
用于存储大文本,最大可以容纳 4G 的字符串。在存储长篇文章、大量的配置信息等场景中发挥重要作用。Blob
能存储最大 4G 的二进制数据,非常适合存储图片、视频、音频等多媒体文件。例如在一个在线教育平台中,课程视频、教师头像图片等就可以使用Blob
类型存储在 Oracle 数据库中。
下面是一个创建students
表的示例:
Create table students(
Id number primary key,
Stu_name nvarchar2(20),
Age number(5)
);
在这个表中,Id
字段作为主键,用于唯一标识每个学生记录,数据类型为number
;Stu_name
字段用于存储学生姓名,采用nvarchar2
类型,最多可存储 20 个字符,适合存储中文姓名;Age
字段存储学生年龄,数据类型为number(5)
。
需要注意的是,在 Oracle 数据库语法中,表名和表的字段名不区分大小写。但为了代码的可读性和规范性,建议统一采用大写或小写的命名风格。
(三)改变语法:灵活调整表结构
- 向表中添加字段:当业务需求发生变化,需要在已有的表中增加新的信息存储隔间时,使用以下语句:
alter table 表的表名 add 新字段名 数据类型 [约束];
例如,在students
表中添加一个Phone_number
字段用于存储学生电话号码:
alter table students add Phone_number varchar2(11);
- 改表的字段数据类型:如果原有的字段数据类型不再满足业务需求,可进行修改:
alter table 表的表名 modify 字段名 新数据类型 [约束];
假设students
表中的Age
字段,最初设计为number(5)
,现在发现需要存储更精确的年龄信息,可修改为number(7,2)
:
alter table students modify Age number(7,2);
- 对表的字段重命名:当字段名称需要调整以更好地反映其含义时,使用:
alter table 表的表名 rename column 旧字段名 to 新字段名;
比如将students
表中的Stu_name
字段重命名为Student_name
:
alter table students rename column Stu_name to Student_name;
- 删除表中的字段:若某个字段不再使用,可将其从表中删除:
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
条件来定位要修改的具体商品记录。
(三)删除数据:移除表中的无用信息
- 使用
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
语句,以便在出现误操作时有恢复的可能。
三、未来在企业工作的小技巧
- 数据类型选择的重要性:在企业级项目中,数据量往往非常庞大。合理选择数据类型不仅能提高数据库的存储效率,还能提升查询和操作数据的性能。例如,对于固定长度且数据量较大的字段,如员工编号,使用
char
类型虽然会占用较多存储空间,但在查询时可能会比varchar
类型更高效,因为数据库无需额外处理变长带来的开销。在设计数据库表结构时,要充分考虑业务需求和数据特点,与团队中的数据分析师、后端开发人员充分沟通,共同确定最优的数据类型方案。 - 数据操作的事务管理:在 Java 全栈开发中,涉及到数据库的增删改操作时,要善于使用事务管理。事务可以确保一组数据库操作要么全部成功执行,要么全部失败回滚。例如,在一个涉及订单创建和库存减少的业务场景中,这两个操作应该放在同一个事务中。如果订单创建成功但库存减少失败,事务回滚可以避免数据不一致的情况。在 Java 中,可以使用 Spring 框架的事务管理机制,通过注解或编程方式来管理事务,确保数据的完整性和一致性。
- 备份与恢复策略:了解
delete
和truncate
的区别,在实际工作中合理运用。对于重要数据的删除操作,优先考虑使用delete
语句,并结合数据库的备份策略。企业级数据库通常会定期进行全量备份和增量备份,在执行delete
操作前,要确保备份是最新的,以便在需要时能够恢复数据。同时,定期对备份数据进行恢复测试,确保备份的有效性,防止在真正需要恢复数据时出现问题。
通过对 Oracle 数据库 DDL 和 DML 语言的学习,我们已经掌握了 Oracle 数据库基础操作的核心技能。在后续的学习中,我们将继续探索 Oracle 数据库的更多高级特性,不断提升在数据库管理和开发方面的能力,为未来在企业级项目中的应用打下坚实基础。