聊聊對Mysql的理解

目錄

1、Sql介紹

1.1、SQL的分類

1.2、數據庫的三大范式

1.3、數據表的約束

1.4、約束的添加與刪除

2、核心特性

3、主要組件

4、數據結構原理

5、索引失效

6、常用問題

7、優勢與局限


前言

????????MySQL是一個開源的關系型數據庫管理系統(RDBMS),由瑞典MySQL AB公司開發,現屬于Oracle旗下產品。


1、Sql介紹

Structure Query Language(結構化查詢語言)簡稱SQL。

1.1、SQL的分類


1、DDL(Data Definition Language) 數據定義語言

用來操作數據庫、表、列等; 常用語句:CREATE、 ALTER、DROP。


2、DML(Data Manipulation Language) 數據操作語言

用來操作數據庫中表里的數據;常用語句:INSERT、 UPDATE、 DELETE。


3、DCL(Data Control Language) 數據控制語言

用來操作訪問權限和安全級別; 常用語句:GRANT、DENY。


4、DQL(Data Query Language) 數據查詢語言

用來查詢數據 常用語句:SELECT。‘’

1.2、數據庫的三大范式


1、第一范式(1NF)

數據庫表的每一列都是不可分割的基本數據線(每列的值具有原子性,不可再分割)。


2、第二范式(2NF)

在第一范式(1NF)的基礎上,如果表是單主鍵,那么主鍵以外的列必須完全依賴于主鍵;如果表是復合主鍵,那么主鍵以外的列必須完全依賴于主鍵,不能僅依賴主鍵的一部分。


3、第三范式(3NF)

在第二范式的基礎上建立起來的,即滿足第三范式必須要先滿足第二范式。第三范式(3NF)要求:表中的非主鍵列必須和主鍵直接相關而不能間接相關;(非主鍵列之間不能相關依賴)。

1.3、數據表的約束

1. 主鍵約束 (PRIMARY KEY)

  • 唯一標識表中的每一行記錄

  • 不允許 NULL 值

  • 一個表只能有一個主鍵

CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50)
);-- 復合主鍵
CREATE TABLE order_items (order_id INT,product_id INT,quantity INT,PRIMARY KEY (order_id, product_id)
);

2. 外鍵約束 (FOREIGN KEY)

  • 建立表與表之間的關系

  • 確保引用完整性

  • 被引用的列必須是主鍵或唯一鍵

CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,order_date DATE,FOREIGN KEY (user_id) REFERENCES users(id)
);

3. 唯一約束 (UNIQUE)

  • 確保列中的所有值都是唯一的

  • 允許 NULL 值(但只能有一個 NULL)

  • 一個表可以有多個 UNIQUE 約束

CREATE TABLE employees (id INT PRIMARY KEY,email VARCHAR(100) UNIQUE,phone VARCHAR(20) UNIQUE
);

4. 非空約束 (NOT NULL)

  • 強制列不接受 NULL 值

  • 必須包含值

CREATE TABLE products (id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,price DECIMAL(10,2) NOT NULL
);

5. 默認約束 (DEFAULT)

  • 當插入數據時,如果沒有提供值,則使用默認值

CREATE TABLE orders (id INT PRIMARY KEY,order_date DATE DEFAULT CURRENT_DATE,status VARCHAR(20) DEFAULT 'pending'
);

6. 檢查約束 (CHECK) - MySQL 8.0+

  • 限制列中值的范圍

  • 確保數據滿足特定條件

CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT CHECK (age >= 18),salary DECIMAL(10,2) CHECK (salary > 0)
);

1.4、約束的添加與刪除

1.添加約束

-- 添加主鍵
ALTER TABLE students ADD PRIMARY KEY (id);-- 添加外鍵
ALTER TABLE orders ADD CONSTRAINT fk_user
FOREIGN KEY (user_id) REFERENCES users(id);-- 添加唯一約束
ALTER TABLE products ADD UNIQUE (product_code);

2.刪除約束

-- 刪除主鍵
ALTER TABLE students DROP PRIMARY KEY;-- 刪除外鍵
ALTER TABLE orders DROP FOREIGN KEY fk_user;-- 刪除唯一約束
ALTER TABLE products DROP INDEX product_code;

合理使用約束可以確保數據庫數據的完整性和一致性,是數據庫設計中的重要環節。


2、核心特性

  1. 開源免費:社區版可免費使用,有活躍的開源社區支持

  2. 跨平臺:支持Windows、Linux、macOS等多種操作系統

  3. 高性能:優化過的存儲引擎(InnoDB等)提供良好的讀寫性能

  4. 可擴展性:支持主從復制、分片等擴展方案

  5. 關系型數據庫:基于表結構存儲數據,支持SQL(結構化查詢語言)

3、主要組件

  • 存儲引擎:InnoDB(默認)、MyISAM、Memory等,各有適用場景

  • 查詢優化器:分析SQL語句并生成高效執行計劃

  • 連接池:管理數據庫連接,提高并發性能

  • 日志系統:包括二進制日志、錯誤日志、慢查詢日志等

4、數據結構原理

5、索引失效

持續更新

6、常用問題

1、count(*)和count(1)和count(列)區別

  1. COUNT(*)COUNT(1)在實際結果上完全相同。

  2. 它們的執行計劃也完全一致。

  3. 在復雜查詢和性能測試中表現相同。

  4. COUNT(列名)有明顯區別,count(列)會忽略NULL值。

2、Delete和Truncate區別

????????TRUNCATE和DETELE都能實現刪除表中的所有數據的功能。

但兩者也是有區別的:


1、DELETE語句后可跟WHERE子句,可通過指定WHERE子句中的條件表達式只刪除滿足條件的部分記錄;但是,TRUNCATE語句只能用于刪除表中的所有記錄。


2、使用TRUNCATE語句刪除表中的數據后,再次向表中添加記錄時自動增加字段的默認初始值重新由1開始;使用DELETE語句刪除表中所有記錄后,再次向表中添加記錄時自動增加字段的值為刪除時該字段的最大值加1。


3、DELETE語句是DML語句,TRUNCATE語句通常被認為是DDL語句。

7、優勢與局限

優勢

  • 成熟穩定,社區支持完善

  • 易于安裝和使用

  • 良好的兼容性和工具生態

  • 支持事務處理(ACID特性)

局限

  • 在大數據量(如PB級)場景下不如NoSQL高效

  • 水平擴展能力相對有限

  • 復雜查詢性能可能不如專用分析型數據庫

參考文章:

1、MySQL 有這一篇就夠(嘔心狂敲37k字,只為博君一點贊!!!)_mysql有這一篇幅就夠了-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904121.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904121.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904121.shtml

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

相關文章

[HOT 100] 1617. 統計子樹中城市之間最大距離

文章目錄 1. 題目鏈接2. 題目描述3. 題目示例4. 解題思路5. 題解代碼6. 復雜度分析 1. 題目鏈接 1617. 統計子樹中城市之間最大距離 - 力扣(LeetCode) 2. 題目描述 給你 n 個城市,編號為從 1 到 n 。同時給你一個大小為 n-1 的數組 edges &…

接口自動化——參數化

之前有說過,通過pytest測試框架標記參數化功能可以實現數據驅動測試。數據驅動測試使用的文件主要有以下類型: txt 文件 csv 文件excel 文件json 文件yaml 文件.... 本文主要講的就是以上幾種文件類型的讀取和使用 一.txt 文件讀取使用 首先創建一個 …

游戲引擎學習第257天:處理一些 Win32 相關的問題

設定今天的工作計劃 今天我們本來是打算繼續開發性能分析器(Profiler),但在此之前,我們認為有一些問題應該先清理一下。雖然這類事情不是我們最關心的核心內容,但我們覺得現在是時候處理一下了,特別是為了…

實驗三 觸發器及基本時序電路

1.觸發器的分類?各自的特點是什么? 1 、 D 觸發器 特點:只有一個數據輸入端 D ,在時鐘脈沖的觸發沿,輸出 Q 的狀態跟隨輸入端 D 的 狀態變化,即 ,功能直觀,利于理解和感受…

硬件加速模式Chrome(Edge)閃屏

Chrome開啟“硬件加速模式”后,打開瀏覽器會閃屏或看視頻會閃屏,如果電腦只有集顯,直接將這個硬件加速關了吧,沒啥必要開著 解決方法 讓瀏覽器使用獨立顯卡 在Windows左下角搜索 圖形設置 ,將瀏覽器添加進去&#…

前端工程化利器:Node.js 文件匹配庫 fast-glob 完全指南——比傳統方案快 350% 的「文件搜索神器」

為什么需要 fast-glob? 在前端工程化場景中,文件匹配是高頻操作:自動化構建、資源打包、靜態資源管理等都依賴高效的路徑匹配。傳統的 node-glob 雖然功能齊全,但性能瓶頸明顯。fast-glob 應運而生——它以 極簡 API 和 超高性能…

React class 的組件庫與函數組件適配集成

如果你有一個 基于 React class 的組件庫,現在需要在 React hooks 函數組件中使用,你可以通過以下幾種方式實現適配和集成: 數據生命周期確保 class 組件使用 React.forwardRef 導出(或手動綁定 ref) ? 1. 直接使用 c…

Sway初體驗

Sway(縮寫自 SirCmpwn’s Wayland compositor[1])是一款專為 Wayland 設計的合成器,旨在與 i3 完全兼容。根據官網所述: Sway 是 Wayland 的合成器,也是 x11 的 i3 窗口管理器的替代品。它可以根據您現有的 i3 配置工作…

dubbo 參數校驗-ValidationFilter

org.apache.dubbo.rpc.Filter 核心功能 攔截RPC調用流程 Filter是Dubbo框架中實現攔截邏輯的核心接口,作用于服務消費者和提供者的作業鏈路,支持在方法調用前后插入自定義邏輯。如參數校驗、異常處理、日志記錄等。擴展性機制 Dubbo通過SPI擴展機制動態…

Lesson 16 A polite request

Lesson 16 A polite request 詞匯 park n. 公園,停車場,莊園 v. 停車,泊車 例句:讓我來停車。    Let me park. 相關:spot n. 車位 區別:garden n. 花園 [小,私家的] 例句:我們…

解決 Builroot 系統編譯 perl 編譯報錯問題

本文提供一種修復 Builroot 系統編譯 perl 編譯報錯途徑 2025-05-04T22:45:08 rm -f pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/ln -s perldelta.pod pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/gcc -c -DPERL_CORE -fwrapv -fpcc-struct-return -pipe -f…

Spring MVC 中解決中文亂碼問題

在 Spring MVC 中解決中文亂碼問題,需要從 請求參數編碼 和 響應內容編碼 兩方面入手。以下是完整的解決方案: 一、解決請求參數中文亂碼 1. POST 請求編碼(表單提交) 配置 CharacterEncodingFilter 在 web.xml 中添加 Spring 提…

MYSQL數據庫突然消失

之前在下載mysql時發現沒有my.ini。考慮到后面的項目可能需要,看著教程自己創建了一次,當時就發生了所有數據庫消失的問題,近幾天這種事件又發生了。我在服務里看到我有mysql和mysql57兩個服務,啟動一個的時候另一個就無法啟動&am…

【Spring】idea + maven 從零創建Spring IoC容器示例

【Spring】idea maven 從零創建Spring IoC容器示例 1. 環境準備2. 創建maven項目3. 添加依賴4. 創建Java類與接口4.1 定義接口UserService4.2 實現接口UserServiceImpl 5. 配置Spring IoC容器6. 編寫主類調用IoC容器擴展:使用注解方式實現IoC1. 修改beans.xml2.使用…

面試回答之STAR結構

面試回答之STAR結構 1. STAR結構的起源 STAR是行為面試法(Behavioral Interview)的核心框架,由以下四個單詞首字母組成: ? Situation(情境) ? Task(任務) ? Action&#xff…

Kubernetes部署運行應用

①使用 Deployment 運行一個無狀態應用 ②運行一個單實例有狀態應用 ③運行一個有狀態的應用程序 ④使用 Persistent Volumes 部署 WordPress 和 MySQL

二叉搜索樹的最近祖先(遞歸遍歷)

235. 二叉搜索樹的最近公共祖先 - 力扣(LeetCode) class Solution { private:TreeNode*traversal(TreeNode*cur,TreeNode*p,TreeNode*q){if(curNULL){return NULL;}if(cur->val>p->val&&cur->val>q->val){TreeNode*lefttrave…

網絡:TCP三次握手、四次揮手

目錄 深刻理解三次握手 深刻理解四次揮手 深刻理解三次握手 三次握手時,如果最后一個ACK包,服務器沒有收到,此時: 客戶端:認為已經建立鏈接 服務器:認為沒有建立鏈接,還在超時等待。 而此…

MySQL 實戰 45 講 筆記 ----來源《極客時間》

01 | 基礎架構:一條SQL查詢語句是如何執行的? 1. MySQL 可以分為 Server層 和 存儲引擎層 兩部分。Server 層包括連接器、查詢緩存、分析器、優化器、執行器等。存儲引擎層支持 InnoDB、MyISAM等. (1) 連接器:管理連接,權限認證…

nextjs+supabase vercel部署失敗

1.不能含有<any> 改成unknown或者增加類(如圖) 2.檢查vecel是否配置環境變量&#xff08;即supabase的url和anon-key&#xff09;