当前位置: 首页 > news >正文

Java学习手册:关系型数据库基础

关系型数据库基础

一、关系型数据库概述

关系型数据库是一种基于关系模型的数据库,它将数据组织成一个或多个表(或称为关系),每个表由行和列组成。每一列都有一个唯一的名字,称为属性,表中的每一行是一个元组,代表一个完整的数据记录。关系型数据库通过表之间的关系来存储和管理数据,这些关系可以通过外键等约束来定义。

常见的关系型数据库管理系统(RDBMS)包括 MySQL、PostgreSQL、Oracle、SQL Server 等,它们都使用 SQL(Structured Query Language,结构化查询语言)作为数据查询和操作的标准语言。

二、数据库设计

  • 数据库建模 :在设计数据库之前,通常需要进行数据库建模。常用的建模方法有 E-R 图(实体 - 关系图),它可以清晰地表示实体、属性和实体之间的关系。例如,一个学校管理系统中,学生和课程是两个实体,它们之间存在多对多的关系,可以通过一个中间表来表示这种关系。
  • 范式设计 :为了减少数据冗余和提高数据一致性,关系型数据库通常遵循一定的范式。常见的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。遵守范式的设计原则可以帮助我们更好地组织数据,减少数据异常。

三、基本操作

  • 数据定义语言(DDL)
    • CREATE :用于创建数据库对象,如数据库、表、索引等。例如,创建一个学生表:
CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT,major VARCHAR(50)
);
* **ALTER** :用于修改已存在的数据库对象的结构。例如,添加一个列:
ALTER TABLE students ADD email VARCHAR(100);
* **DROP** :用于删除数据库对象。例如,删除一个表:
DROP TABLE students;
  • 数据操纵语言(DML)
    • INSERT :向表中插入数据。例如:
INSERT INTO students (id, name, age, major) VALUES (1, 'John Doe', 20, 'Computer Science');
* **UPDATE** :更新表中的数据。例如:
UPDATE students SET age = 21 WHERE id = 1;
* **DELETE** :删除表中的数据。例如:
DELETE FROM students WHERE id = 1;
  • 数据查询语言(DQL)
    • SELECT :用于查询表中的数据。例如,查询所有学生的信息:
SELECT * FROM students;
* 条件查询:可以根据特定条件查询数据。例如,查询年龄大于 20 的学生:
SELECT * FROM students WHERE age > 20;
* 排序查询:可以对查询结果进行排序。例如,按照年龄降序排列:
SELECT * FROM students ORDER BY age DESC;
* 分组和聚合查询:可以使用 GROUP BY 子句和聚合函数(如 COUNT、SUM、AVG 等)对数据进行分组和聚合。例如,统计每个专业的学生数量:
SELECT major, COUNT(*) FROM students GROUP BY major;
  • 数据控制语言(DCL)
    • GRANT :用于授予用户对数据库对象的访问权限。例如:
GRANT SELECT, INSERT ON students TO 'username'@'localhost';
* **REVOKE** :用于撤销用户的访问权限:
REVOKE SELECT ON students FROM 'username'@'localhost';

四、事务管理

  • 事务的 ACID 特性 :事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

    • 原子性:事务中的操作要么全部成功,要么全部失败。
    • 一致性:事务执行前后,数据库从一个一致状态转换到另一个一致状态。
    • 隔离性:并发执行的事务之间互不干扰。
    • 持久性:事务完成后,其对数据库的修改是永久的。
  • 事务操作 :在 SQL 中,可以使用 COMMIT 提交事务,使用 ROLLBACK 回滚事务。例如:

START TRANSACTION;
UPDATE account1 SET balance = balance - 100 WHERE id = 1;
UPDATE account2 SET balance = balance + 100 WHERE id = 2;
COMMIT;

五、索引

  • 索引的作用 :索引是数据库中用于提高查询速度的结构,类似于书籍的目录。通过在表的列上创建索引,可以加快对数据的查询速度。
  • 索引的类型 :常见的索引类型有单列索引、复合索引、唯一索引、全文索引等。
  • 创建索引 :例如,在学生表的 name 列上创建索引:
CREATE INDEX idx_name ON students (name);
  • 使用索引的注意事项 :虽然索引可以提高查询速度,但也会增加插入、更新和删除数据时的开销。因此,在创建索引时需要权衡查询性能和数据修改的开销。

六、视图

  • 视图的作用 :视图是一种虚拟表,其内容由查询定义。视图可以简化复杂的查询,隐藏数据的复杂性,还可以用于限制对某些数据的访问。
  • 创建视图 :例如,创建一个显示学生姓名和专业的视图:
CREATE VIEW student_info AS
SELECT name, major FROM students;
  • 查询视图 :查询视图和查询表类似:
SELECT * FROM student_info;
  • 更新视图 :某些情况下,可以通过视图更新数据,但复杂的视图可能不支持更新操作。

七、存储过程

  • 存储过程的作用 :存储过程是一组 SQL 语句的集合,它可以预先编译并存储在数据库中。通过调用存储过程,可以执行一系列的操作,减少网络传输,提高执行效率。
  • 创建存储过程 :例如,在 MySQL 中创建一个计算两个数之和的存储过程:
DELIMITER //
CREATE PROCEDURE add_numbers (IN a INT, IN b INT, OUT result INT)
BEGINSET result = a + b;
END //
DELIMITER ;
  • 调用存储过程
CALL add_numbers(5, 3, @result);
SELECT @result;

八、数据库连接池

  • 数据库连接池的作用 :在 JavaWeb 开发中,频繁地创建和关闭数据库连接会带来较大的性能开销。数据库连接池预先创建并维护一定数量的数据库连接,当应用需要进行数据库操作时,可以从连接池中获取一个空闲连接,使用完毕后再将连接归还给连接池,而不是真正地关闭连接。这样可以显著减少连接创建和释放的开销,提高数据库操作的性能和效率。
  • 常见的数据库连接池 :包括 DBCP(Apache 数据库连接池)、C3P0、HikariCP 等。
  • 配置连接池 :通常需要在应用初始化时配置连接池参数,如初始连接数、最大连接数、最小空闲连接数等。然后通过连接池提供的接口获取数据库连接,进行数据库操作。

九、总结

掌握关系型数据库的基础知识对于 Java 开发者来说是至关重要的,无论是进行 Web 开发还是企业级应用开发,都离不开与数据库的交互。通过深入理解关系型数据库的基本概念、数据库设计原则、SQL 语言的使用、事务管理、索引优化、视图和存储过程的应用等,开发者能够更加高效地进行数据库操作,构建出性能优良、数据一致的应用系统。在实际开发中,还需不断地实践和优化,以应对各种复杂的业务需求。

http://www.xdnf.cn/news/264043.html

相关文章:

  • 爬虫准备前工作
  • 【AI面试准备】NLP解析API文档生成测试脚本
  • 二叉树 - JS - 2
  • 49-dify案例分享-私有化 MCP 广场搭建与网页小游戏智能体工作流实战
  • 学习Cesium自定义材质
  • 硬件工程师面试常见问题(12)
  • 【LeetCode Hot100】贪心篇
  • 在pycharm profession 2020.3将.py程序使用pyinstaller打包成exe
  • Windows 中使用dockers创建指定java web 为镜像和运行容器
  • C++ STL vector高级特性与实战技巧
  • AVFormatContext 再分析零
  • 在Windows系统中使用Docker发布镜像到镜像仓库
  • 用PyTorch搭建卷积神经网络实现MNIST手写数字识别
  • 生成式 AI 的工作原理
  • Elasticsearch 中的索引模板:如何使用可组合模板
  • 【在Spring Boot中集成Redis】
  • 【赵渝强老师】TiDB生态圈组件
  • 3D人物关系图开发实战:Three.js实现自动旋转可视化图谱(附完整代码)
  • 人工智能助力工业制造:迈向智能制造的未来
  • 别样健康养生之道
  • AI 与生物技术的融合:开启精准医疗的新纪元
  • ros2 humble 控制真实机械臂(以lerobot为例)
  • 一种基于重建前检测的实孔径雷达实时角超分辨方法——论文阅读
  • **Java面试大冒险:谢飞机的幽默与技术碰撞记**
  • 做响应式布局网页多简单
  • AI生成视频检测方法及其相关研究
  • WebRTC 服务器之Janus概述和环境搭建
  • Spring MVC入门
  • 第12章:精神力的禁忌边界
  • 强化学习--3.值函数的方法(贝尔曼方程)