資料庫四大特性及其相關內容

一、資料庫四大特性五大約束

資料庫四大特性是指:原子性、一致性、隔離性和持久性,下文將根據這四大特性詳細探討五大約束。

1. 實體完整性約束

實體完整性約束用來保證每張表都有一個主鍵,而且不允許為空。它還可以用來防止出現重複的記錄。

<create table students(
   ID int PRIMARY KEY NOT NULL,
   Name varchar(255) NOT NULL,
   Age int NOT NULL,
   Address varchar(255),
   CLass varchar(255) NOT NULL,
   Sex varchar(255) NOT NULL,
   Phone varchar(255)
);>

2. 參照完整性約束

參照完整性約束用來保證在一個表中的外鍵使用的參照表中的主鍵是唯一的。它可以防止以後刪除一些記錄帶來的問題。

<create table class(
   Class varchar(255) PRIMARY KEY NOT NULL,
   HeadTeacher varchar(255) NOT NULL
);

create table students(
   ID int PRIMARY KEY NOT NULL,
   Name varchar(255) NOT NULL,
   Age int NOT NULL,
   Address varchar(255),
   CLass varchar(255) NOT NULL,
   Sex varchar(255) NOT NULL,
   Phone varchar(255),
   foreign key(CLass) references class(Class)
);>

3. 域完整性約束

域完整性約束用來限制每一個屬性的取值範圍,比如年齡不能小於0。

<create table students(
   ID int PRIMARY KEY NOT NULL,
   Name varchar(255) NOT NULL,
   Age int NOT NULL CHECK (Age > 0),
   Address varchar(255),
   CLass varchar(255) NOT NULL,
   Sex varchar(255) NOT NULL,
   Phone varchar(255)
);>

4. 用戶定義完整性約束

用戶定義完整性約束用來進行內容上的限制,比如手機號必須是11位純數字。

<create table users(
   Name varchar(255) PRIMARY KEY NOT NULL,
   Password varchar(255) NOT NULL,
   Email varchar(255) NOT NULL,
   Phone varchar(11) NOT NULL CHECK (Phone LIKE '[0-9]%')
);>

5. 觸發器約束

觸發器約束在一張表上設置一個觸發器,在該表中添加、修改或刪除記錄時,觸發器會按照一定規則執行相應操作。

<CREATE TRIGGER update_salary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary > OLD.salary THEN
   INSERT INTO record VALUES(OLD.ID, OLD.salary, NEW.salary)
END IF;
END;>

二、資料庫四大特性三大範式

三大範式是指:第一範式(1NF)、第二範式(2NF)和第三範式(3NF),它們屬於逐步消除數據冗餘的策略。下面我們分別簡單介紹一下這三個範式。

1. 第一範式(1NF)

第一範式指每個屬性都是原子性的,不可再分,這是消除重複數據的第一步。

<create table students(
   ID int PRIMARY KEY NOT NULL,
   Name varchar(255) NOT NULL,
   Age int NOT NULL,
   Address varchar(255),
   CLass varchar(255) NOT NULL,
   Sex varchar(255) NOT NULL,
   Phone varchar(255)
);>

2. 第二範式(2NF)

第二範式指消除非主屬性對主鍵的部分依賴,即表中任何非主屬性都不能只依賴於主鍵的部分,而應該依賴於整個主鍵。

<create table orders(
   OrderID int PRIMARY KEY NOT NULL,
   CustomerID varchar(255) NOT NULL,
   OrderDate date NOT NULL,
   ProductID int NOT NULL,
   Quantity int NOT NULL,
   Price decimal(18,2) NOT NULL,
   foreign key(CustomerID) references customers(CustomerID)
   foreign key(ProductID) references products(ProductID)
);>

3. 第三範式(3NF)

第三範式指消除非主屬性對主鍵的傳遞依賴,即當一個非主屬性依賴於另一個非主屬性時,應該將這些非主屬性分別放到獨立的關係中。

<create table orders(
   OrderID int PRIMARY KEY NOT NULL,
   CustomerID varchar(255) NOT NULL,
   OrderDate date NOT NULL,
   foreign key(CustomerID) references customers(CustomerID)
);

create table order_details(
   OrderID int NOT NULL,
   ProductID int NOT NULL,
   Quantity int NOT NULL,
   Price decimal(18,2) NOT NULL,
   foreign key(OrderID) references orders(OrderID)
   foreign key(ProductID) references products(ProductID)
);>

三、資料庫四大特性及資料庫隔離級別

資料庫隔離級別用來解決多個事務之間產生的一致性問題,下面我們選擇四種隔離級別來介紹。

1. 讀未提交(read uncommitted)

事務中的改變會馬上被其他事務所見,容易造成臟讀、不可重複讀和幻讀等問題。優點是效率高,缺點是不安全不穩定。

2. 讀已提交(read committed)

事務中的改變只有在提交以後其他事務才能看到,可以避免臟讀,但仍然存在不可重複讀和幻讀的問題。

3. 可重複讀(repeatable read)

在這種隔離級別下,讀取過的數據會被緩存,直到事務結束,保證了事務中所讀取的數據的一致性,同時可以避免臟讀和不可重複讀的問題,但仍然有可能發生幻讀。

4. 序列化(serializable)

將所有事務串列執行,可以避免所有的並發問題,但同時也犧牲了系統的性能。

<SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

START TRANSACTION;

SELECT * FROM students WHERE Age < 20;

COMMIT;>

四、資料庫四大類型

資料庫類型指的是在關係模型中使用到的數據類型。下面我們介紹四種主要的資料庫類型。

1. 數值類型

數值類型分為整型和浮點型,常見的整型有int、bigint、tinyint等,常見的浮點型有float、double等。

<create table students(
   ID int PRIMARY KEY NOT NULL,
   Name varchar(255) NOT NULL,
   Age int NOT NULL,
   Score float NOT NULL
);>

2. 字元串類型

字元串類型常見的有char、varchar、text等,char是固定長度的字元串,varchar是變長的字元串,text用來存放更長的字元串。

<create table students(
   ID int PRIMARY KEY NOT NULL,
   Name varchar(255) NOT NULL,
   Age int NOT NULL,
   Address text NOT NULL
);>

3. 時間類型

時間類型主要包含date、time、datetime、timestamp等,用來存儲時間或日期相關的數據。

<create table orders(
   OrderID int PRIMARY KEY NOT NULL,
   OrderDate date NOT NULL,
   OrderTime time NOT NULL,
   DateTime datetime NOT NULL,
   TimeStamp timestamp NOT NULL
);>

4. 二進位類型

二進位類型主要用來存儲二進位數據,如圖片、音頻等。

<create table images(
   ImageID int PRIMARY KEY NOT NULL,
   ImageData longblob NOT NULL
);>

五、資料庫四大語言

資料庫語言包含DQL(數據查詢語言)、DML(數據操作語言)、DDL(數據定義語言)和DCL(數據控制語言),下面我們將按照不同語言進行介紹。

1. 數據查詢語言(DQL)

數據查詢語言主要用來查詢數據,包括SELECT、FROM、WHERE等關鍵字。

<SELECT * FROM students WHERE Age < 20;>

2. 數據操作語言(DML)

數據操作語言主要用來對數據進行增、刪、改,包括INSERT、UPDATE、DELETE等關鍵字。

<INSERT INTO students(ID, Name, Age) VALUES(1, 'Tom', 20);>

3. 數據定義語言(DDL)

數據定義語言主要用來定義或修改資料庫中的對象,包括CREATE、ALTER、DROP等關鍵字。

<CREATE TABLE students(
   ID int PRIMARY KEY NOT NULL,
   Name varchar(255) NOT NULL,
   Age int NOT NULL
);>

4. 數據控制語言(DCL)

數據控制語言主要用來對資料庫進行控制,包括GRANT、REVOKE等關鍵字。

<GRANT SELECT, UPDATE ON students TO user1;

REVOKE SELECT, UPDATE ON students FROM user2;>

六、資料庫四大範式與資料庫四大原則

資料庫四大範式和四大原則是資料庫設計中的重要概念,下面我們將按照不同範式和原則進行介紹。

1. 第一範式(1NF)

第一範式指每個屬性都是原子性的,不可再分,這是消除重複數據的第一步。在資料庫設計中,應該儘可能使每一列數據都是原子型的數據,也就是不可再分的數據。

2. 第二範式(2NF)

第二範式指消除非主屬性對主鍵的部分依賴,即表中任何非主屬性都不能只依賴於主鍵的部分,而應該依賴於整個主鍵。在資料庫設計中,應該將表中的某一行數據作為一個整體來理解,同時要保證每個表都有一個主鍵。

3. 第三範式(3NF)

第三範式指消除非主屬性對主鍵的傳遞依賴,即當一個非主屬性依賴於另一個非主屬性時,應該將這些非主屬性分別放到獨立的關係中。在資料庫設計中,應該避免表之間的冗餘,保證每個表只存儲相關的數據,不要存儲無關的數據。

4. 資料庫四大原則

資料庫四大原則是指:原子性、一致性、隔離性和持久性,下面我們分別來介紹一下。

5. 原子性

原子性指一個事務

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/204548.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 12:18
下一篇 2024-12-07 12:18

相關推薦

  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python計算機語言的特性與應用

    Python,是一種高層次、解釋型的、面向對象的計算機編程語言。 一、簡介 Python編程語言的初衷是:代碼簡潔易讀、可拓展性強、適用範圍廣。其應用領域包括Web開發、數據科學、…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • Think-ORM數據模型及資料庫核心操作

    本文主要介紹Think-ORM數據模型建立和資料庫核心操作。 一、模型定義 Think-ORM是一個開源的ORM框架,用於簡化在PHP應用中(特別是ThinkPHP)與關係資料庫之…

    編程 2025-04-27
  • 如何使用Python將CSV文件導入到資料庫

    CSV(Comma Separated Values)是一種可讀性高、易於編輯與導入導出的文件格式,常用於存儲表格數據。在數據處理過程中,我們有時需要將CSV文件導入到資料庫中進行…

    編程 2025-04-27
  • Python批量導入資料庫

    本文將介紹Python中如何批量導入資料庫。首先,對於數據分析和挖掘領域,資料庫中批量導入數據是一個必不可少的過程。這種高效的導入方式可以極大地提高數據挖掘、機器學習等任務的效率。…

    編程 2025-04-27
  • Activiti 6自動部署後不生成資料庫act_hi_*的解決方法

    本文將從多個方面詳細闡述Activiti 6自動部署後不生成資料庫act_hi_*的問題,並提供對應的代碼示例。 一、問題分析 在使用Activiti 6部署流程後,我們發現act…

    編程 2025-04-27

發表回復

登錄後才能評論