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.pswp.cn/diannao/81623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81623.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wpf CommandParameter 傳遞MouseWheelEventArgs參數

在 WPF 中通過 CommandParameter 傳遞 MouseWheelEventArgs 參數時,需結合 ?事件到命令的轉換機制? 和 ?參數轉換器? 來實現。以下是具體實現方案及注意事項: 一、核心實現方法 1. ?使用 EventToCommand 傳遞原始事件參數? 通過 Interaction.Tr…

八大排序之選擇排序

本篇文章將帶你詳細了解八大基本排序中的選擇排序 目錄 (一)選擇排序的時間復雜度和空間復雜度及穩定性分析 (二)代碼實現 (三)輸出結果 選擇排序的基本原理是:每次從待排序的數組中找出最大值和最小值。具體流程是…

【算法學習】哈希表篇:哈希表的使用場景和使用方法

算法學習: https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言: 在之前學習數據結構時我們就學習了哈希表的使用方法,這里我們主要是針對哈希表的做題方法進行講解,都是leetcode上的經典…

Java 中如何實現自定義類加載器,應用場景是什么?

在 Java 中,可以通過繼承 java.lang.ClassLoader 類來實現自定義類加載器。自定義類加載器可以控制類的加載方式,實現一些特殊的應用場景。 實現自定義類加載器的步驟: 繼承 java.lang.ClassLoader 類。 重寫 findClass(String name) 方法 …

信創開發中跨平臺開發框架的選擇與實踐指南

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開…

WebRTC 服務器之Janus架構分析

1. Webrtc三種類型通信架構 1.1 1 對 1 通信 1 對 1 通信模型設計的主要?標是盡量讓兩個終端進?直聯,這樣即可以節省服務器的資源,?可以提? ?視頻的服務質量。WebRTC ?先嘗試兩個終端之間是否可以通過 P2P 直接進?通信,如果?法直接…

數字化轉型進階:26頁華為數字化轉型實踐分享【附全文閱讀】

本文分享了華為數字化轉型的實踐經驗和體會。華為通過數字化變革,致力于在客戶服務、供應鏈、產品管理等方面提高效率,并把數字世界帶入每個組織,構建萬物互聯的智能世界。華為的數字化轉型愿景是成為行業標桿,通過推進數字化戰略、構建面向業務數字化轉型的IT組織陣型、堅…

Hal庫下備份寄存器

首先要確保有外部電源給VBAT供電 生成后應該會有這兩個文件(不知道為什么生成了好幾次都沒有,復制工程在試一次就有了) 可以看到stm32f407有20個備份寄存器 讀寫函數 void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t Backup…

使用 Vue3 + Webpack 和 Vue3 + Vite 實現微前端架構(基于 Qiankun)

在現代前端開發中,微前端架構逐漸成為一種流行的解決方案,尤其是在大型項目中。通過微前端,我們可以將一個復雜的單體應用拆分為多個獨立的小型應用,每個子應用可以獨立開發、部署和運行,同時共享主應用的基礎設施。本…

【c++】【STL】list詳解

目錄 list的作用list的接口構造函數賦值運算符重載迭代器相關sizeemptyfrontbackassignpush_frontpop_frontpush_backpop_backinserteraseswapresizeclearspliceremoveremove_ifuniquemergesortreverse關系運算符重載(非成員函數) list的模擬實現結點類迭…

Redis持久化:

什么是Redis持久化: Redis 持久化是指將 Redis 內存中的數據保存到硬盤等持久化存儲介質中,以便在 Redis 服務器重啟或出現故障時能夠恢復數據,保證數據的可靠性和持續性。Redis 提供了兩種主要的持久化方式:RDB(Redi…

VBA 64位API聲明語句第009講

跟我學VBA,我這里專注VBA, 授人以漁。我98年開始,從源碼接觸VBA已經20余年了,隨著年齡的增長,越來越覺得有必要把這項技能傳遞給需要這項技術的職場人員。希望職場和數據打交道的朋友,都來學習VBA,利用VBA,起碼可以提高…

在pycharm profession 2020.3將.py程序使用pyinstaller打包成exe

一、安裝pyinstaller 在pycharm的項目的Terminal中運行pip3 install pyinstaller即可。 安裝后在Terminal中輸入pip3 list看一下是否成功 二、務必在在項目的Terminal中輸入命令打包,命令如下: python3 -m PyInstaller --noconsole --onefile xxx.py …

Unity SpriteRenderer(精靈渲染器)

🏆 個人愚見,沒事寫寫筆記 🏆《博客內容》:Unity3D開發內容 🏆🎉歡迎 👍點贊?評論?收藏 🔎SpriteRenderer:精靈渲染器 💡Sprite Renderer是精靈渲染器,所有…

2.LED燈的控制和按鍵檢測

目錄 STM32F103的GPIO口 GPIO口的作用 GPIO口的工作模式 input輸入檢測 -- 向內檢測 output控制輸出 -- 向外輸出 寄存器 寄存器地址的確定 配置GPIO口的工作模式 時鐘的開啟和關閉 軟件編程驅動 LED 燈 硬件 軟件 軟件編程驅動 KEY 按鍵 硬件 軟件 按鍵消抖 代碼 STM32F…

Flink 的狀態機制

在實時流處理領域,狀態管理是構建復雜業務邏輯的核心能力。Apache Flink 通過統一的狀態抽象和高效的容錯機制,為開發者提供了從毫秒級窗口聚合到 TB 級歷史數據關聯的全場景支持。本文將深入剖析 Flink 狀態機制的底層原理,結合實際案例展示…

【查看.ipynp 文件】

目錄 如何打開 .ipynb 文件? 如果確實是 .ipynp 文件: .ipynp 并不是常見的 Jupyter Notebook 文件格式。通常,Jupyter Notebook 文件的擴展名是 .ipynb(即 Interactive Python Notebook)。如果你遇到的是 .ipynb 文…

Runnable組件重試機制降低程序錯誤率

一、LangChain 重試機制深度解析 當構建生產級AI應用時,with_retry() 機制可有效提升系統容錯性,典型應用場景包括: API調用頻率限制時的自動恢復模型服務臨時不可用的故障轉移網絡波動導致的瞬時異常處理 參數詳解與配置策略 1. 參數配置…

k8s筆記——kubebuilder工作流程

kubebuilder工作流程 Kubebuilder 工作流程詳解 Kubebuilder 是 Kubernetes 官方推薦的 Operator 開發框架,用于構建基于 Custom Resource Definitions (CRD) 的控制器。以下是其核心工作流程的完整說明: 1. 初始化項目 # 創建項目目錄 mkdir my-opera…

Java框架“若依RuoYi”前后端分離部署

運行環境 Eclipse IDE for Enterprise Java and Web Developers 下載Eclipse解壓Eclipse到文件夾 Maven 下載Maven解壓Maven到文件夾配置環境變量MAVEN_HOME為Maven安裝位置配置環境變量path為%MAVEN_HOME%\bin Redis 下載Redis解壓Redis到文件夾配置環境變量path為Redis安裝位…