当前位置: 首页 > 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 语言的使用、事务管理、索引优化、视图和存储过程的应用等,开发者能够更加高效地进行数据库操作,构建出性能优良、数据一致的应用系统。在实际开发中,还需不断地实践和优化,以应对各种复杂的业务需求。

相关文章:

  • C++ 中 virtual 的作用
  • 什么是函数重载?
  • 【开源免费】二维码批量识别-未来之窗——C#-仙盟创梦IDE
  • 在 Ubuntu 上安装 cPanel
  • 20:深度学习-多层感知器原理
  • Linxu基本操作
  • 计算机系统结构 第二章 :缓存优化
  • Java中深拷贝与浅拷贝的深入探讨
  • C++抽象基类三重防线:纯虚函数与保护构造的深度实践
  • springAop代理责任链模式源码解析
  • 《解锁GCC版本升级:开启编程新世界大门》
  • Python蓝桥杯真题代码
  • 工作记录 2015-06-01
  • 数据库介绍以及windows下mysql安装
  • vector和string的迭代器
  • BG开发者日志505:项目总体情况
  • PowerPC架构详解:定义、应用及特点
  • 软件管理(安装方式)
  • MCP 探索:MCP 集成的相关网站 Smithery、PulseMCP 等
  • MySQL安装完全指南:从零开始到配置优化(附避坑指南)
  • 体坛联播|拜仁遭绝平未能提前夺冠,刘翔钻石联赛纪录作古
  • 燕子矶:物流网络中的闪亮节点|劳动者的书信②
  • 长三角铁路今日预计发送旅客420万人次,有望创单日客发量新高
  • 涉嫌严重违纪违法,57岁证监会副主席王建军被查
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 俄伏尔加格勒机场正式更名为斯大林格勒机场