MySQL數據庫開發教學(二) 核心概念、重要指令

書接上回:MySQL數據庫開發教學(一) 基本架構-CSDN博客

建議工具:

Navicat Premium (收費 / 需破解):Navicat Premium | 管理和開發你的數據庫

phpstudy 2018 (免費):phpStudy - Windows 一鍵部署 PHP 開發環境 · 小皮出品


前言

? ? ? ? 大家好,我是小楓。上期跟大家說完MySQL數據庫的基本架構,那麼這期小編就會帶大家了解一下MySQL中有哪些重要指令和一些重要概念,以及其作用吧。廢話不多說,我們開始吧。

:以下所說的命令無論在cmd黑窗口或navicat premium上都是一樣的,請大家一定要看過前一篇(數據類型)後再往下看,不然可能會看不懂。



目錄

前言

一、主鍵(Primary Key)

? ? ? ? 1.1 主鍵約束的特性

? ? ? ? 1.2 實際應用

二、外鍵(Foreign Key)

? ? ? ? 2.1 外鍵的作用

? ? ? ? 2.2 外鍵約束類型

三、索引(Index)

? ? ? ? 3.1 索引類型

? ? ? ? 3.2 索引的優缺點

????????優點:

????????缺點:

四、特殊欄位屬性

五、SQL結構化查詢語言

5.1 四大分類

????????5.2 必背基礎命令

? ? ? ? 5.3?DDL(數據定義語言)

? ? ? ? 5.3.1 數據庫操作

? ? ? ? 5.3.2 表格操作

? ? ? ? 5.4 DML(數據操縱語言)

? ? ? ? 5.4.1?INSERT - 插入數據

? ? ? ? 5.4.2?UPDATE - 更改數據

? ? ? ? 5.4.3?DELETE - 刪除數據

? ? ? ? 5.5 DQL(數據查詢語言)

? ? ? ? 5.5.1?基礎查詢

? ? ? ? 5.5.2 條件查詢

? ? ? ? 5.5.3?模糊查詢

? ? ? ? 5.5.4??聚合查詢

? ? ? ? 5.5.5?排序查詢

? ? ? ? 5.5.6?分組查詢

? ? ? ? 5.5.7? 分頁查詢

六、MySQL表關係

? ? ? ? 6.1 一對一關係

? ? ? ? 6.2 一對多關係

? ? ? ? 6.3 多對多關係

? ? ? ? 6.3.1 外鍵設置實務

七、進階查詢技巧

? ? ? ? 7.1 UNION合併查詢

? ? ? ? 7.2?GROUP_CONCAT函數

? ? ? ? 7.3 字符集處理

八、小結


一、主鍵(Primary Key)

主鍵是資料庫表中用來唯一識別每一筆記錄的一列或多列組合。主鍵的作用是確保表中的每一筆記錄都有一個獨特的識別標誌,類似於身分證號碼的概念。主鍵的設置是資料庫設計中的基本要求,通常作為記錄的第一列出現。

? ? ? ? 1.1 主鍵約束的特性

  1. 唯一性:主鍵列的每一個值都必須是唯一的,不能有重複值。

  2. 非空性:主鍵列不能包含NULL值,必須始終有值。

  3. 不可變性:主鍵值一旦設定,不應該隨時間改變。

? ? ? ? 1.2 實際應用

在實際資料庫設計中,主鍵通常採用以下幾種形式:

  • 單一欄位主鍵:使用一個欄位作為主鍵,最常見的是ID欄位

  • 複合主鍵:使用多個欄位組合作為主鍵,當單一欄位無法確保唯一性時使用

-- 創建帶有主鍵的表格
CREATE TABLE users (id INT PRIMARY KEY,    #創建並設id為主鍵並規定數據類型為數字name VARCHAR(50) NOT NULL,    #創建字段name並規定數據類型為少於50個任意字符email VARCHAR(100)    #創建字段email並規定數據類型為少於100個任意字符
);

二、外鍵(Foreign Key)

外鍵是建立表與表之間關聯的機制,它指向另一張表的主鍵。外鍵約束用來維護資料庫表之間數據一致性和完整性,確保數據的關聯性不會被破壞。

? ? ? ? 2.1 外鍵的作用

  1. 保持數據一致性:確保外鍵值必須存在於被參考表的主鍵中

  2. 維護引用完整性:防止意外刪除或修改被參考的數據

  3. 建立表關係:明確表與表之間的關聯方式

? ? ? ? 2.2 外鍵約束類型

  • RESTRICT:拒絕刪除或更新主鍵

  • CASCADE:同步刪除或更新外鍵

  • SET NULL:將外鍵設為NULL

  • NO ACTION:不採取任何動作

-- 創建帶有外鍵的表格
CREATE TABLE orders (order_id INT PRIMARY KEY,    #創建並設order_id為主鍵並規定數據類型為數字user_id INT,                #創建字段user_id並規定數據類型為數字order_date DATE,            #創建字段order_date並規定數據類型為日期FOREIGN KEY (user_id) REFERENCES users(id)    #設user_id為外鍵,數據引用自users表中的id列
);

三、索引(Index)

索引是資料庫中用來加速數據檢索的數據結構,類似於書籍的目錄。它能夠幫助資料庫系統快速定位到所需的數據,而不需要逐行掃描整個表格。

? ? ? ? 3.1 索引類型

  1. 普通索引(INDEX):最基本的索引類型,允許重複值和NULL值

  2. 唯一索引(UNIQUE):不允許重複值,但允許NULL值

  3. 主索引(PRIMARY KEY):特殊的唯一索引,不允許NULL值

  4. 全文索引(FULLTEXT):用於全文搜尋

? ? ? ? 3.2 索引的優缺點

????????優點
  • 大幅提高查詢速度

  • 加速表與表之間的連接

????????缺點
  • 佔用額外儲存空間

  • 降低數據新增、修改、刪除的速度

-- 創建索引
CREATE INDEX idx_name ON users(name);
-- 創建唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);

=> 不是很重要,大家知道就好了

四、特殊欄位屬性

  1. AUTO_INCREMENT:自動遞增,常用於主鍵欄位

  2. NULL/NOT NULL:控制欄位是否允許空值

  3. DEFAULT:設定欄位預設值

-- 使用特殊屬性的範例
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,    #自動遞增,即1234567...name VARCHAR(100) NOT NULL,        #不可為空,為空則報錯price DECIMAL(10,2) DEFAULT 0.00,    #若沒有數據則默認為0.00created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP    #同上,上一篇講了格式大家可以稍微去看一下
);

五、SQL結構化查詢語言

????????以下指令將以此表為例作說明,途中數據會更改,不用太較真哈

5.1 四大分類

  1. 數據定義語言(DDL)

    • 用於創建和修改資料庫對象結構

    • 主要指令:CREATE、ALTER、DROP

  2. 數據操縱語言(DML)

    • 用於對資料庫中的數據進行新增、修改、刪除

    • 主要指令:INSERT、UPDATE、DELETE

  3. 數據查詢語言(DQL)

    • 用於查詢數據庫中的數據

    • 主要指令:SELECT

  4. 數據控制語言(DCL)

    • 用於控制用戶對數據的訪問權限

    • 主要指令:GRANT、REVOKE

????????5.2 必背基礎命令

-- 查看所有資料庫
SHOW DATABASES;-- 設置編碼
CHARSET gbk; -- 也可以是utf8或utf8mb4-- 切換資料庫
USE <database_name>;-- 查看當前所選資料庫
SELECT DATABASE();-- 查看當前資料庫所有表格
SHOW TABLES;-- 查看表格結構
DESC <table_name>;-- 查看表格數據
SELECT * FROM <table_name>;    # *=全部,select * = 展示全部

? ? ? ? 5.3?DDL(數據定義語言)

? ? ? ? 5.3.1 數據庫操作
-- 創建資料庫
CREATE DATABASE <db_name>;-- 判斷是否存在後創建
CREATE DATABASE IF NOT EXISTS <db_name>;-- 指定字符集創建資料庫
CREATE DATABASE <db_name> CHARACTER SET utf8mb4;    # 用gbk可顯示中文-- 修改資料庫字符集
ALTER DATABASE <db_name> CHARACTER SET utf8mb4;

? ? ? ? 5.3.2 表格操作
-- 創建表格
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,price DOUBLE,brand VARCHAR(20),stock INT,insert_time DATE
);-- 查看表格結構
DESC products;

? ? ? ? 5.4 DML(數據操縱語言)

? ? ? ? 5.4.1?INSERT - 插入數據
-- 完整寫法
INSERT INTO <table_name(表名)> (column1, column2, column3, ...)(字段)
VALUES (value1, value2, value3, ...);(對應字段的值)-- 省略欄位名寫法(需提供所有欄位值)
INSERT INTO <table_name>    #column略寫=選擇全部column
VALUES (value1, value2, value3, ...);-- 多筆數據插入
INSERT INTO <table_name> (column1, column2)
VALUES (value1, value2),(value3, value4),(value5, value6);

? ? ? ? 5.4.2?UPDATE - 更改數據
-- 更改特定條件的數據
UPDATE <table_name>
SET <column1> = <value1>, <column2> = <value2>, ...
WHERE <condition(條件)>;    -- 範例:將id為1的產品價格改為1999
UPDATE products
SET price = 1999
WHERE id = 1;    #當id=1時,price改成1999

? ? ? ? 5.4.3?DELETE - 刪除數據
-- 刪除特定條件的數據
DELETE FROM <table_name> WHERE <condition(條件)>;-- 範例:刪除id為5的產品
DELETE FROM products WHERE id = 5;

重要UPDATE和DELETE操作必須加上WHERE條件,否則會影響所有數據記錄

? ? ? ? 5.5 DQL(數據查詢語言)

? ? ? ? 5.5.1?基礎查詢
-- 查詢特定欄位
SELECT <column1(字段名)>, <column2> FROM <table_name(表名)>;-- 查詢所有欄位
SELECT * FROM <table_name>;-- 使用別名
SELECT <column_name> AS <alias_name(別名)> FROM <table_name>;    #但where 條件還是要寫全名

? ? ? ? 5.5.2 條件查詢
-- 基礎條件查詢
SELECT <column1>, <column2(字段名>
FROM <table_name(表名)>
WHERE <condition(條件)>;-- 比較運算符
SELECT * FROM products WHERE price > 9000;-- BETWEEN範圍查詢
SELECT * FROM products WHERE price BETWEEN 4999 AND 10000;  #即4999<=price and 10000>=price-- IN條件查詢
SELECT * FROM products WHERE stock IN (20, 59);    #即or,查詢stock=20 或 stock=59的數據-- NULL(為空)值檢查
SELECT * FROM products WHERE brand IS NULL;
SELECT * FROM products WHERE brand IS NOT NULL;

? ? ? ? 5.5.3?模糊查詢
-- % 匹配0個或多個字符
SELECT * FROM products WHERE name LIKE '小米%';    -- _ 匹配單個字符
SELECT * FROM products WHERE name LIKE '小米_機';  

? ? ? ? 5.5.4??聚合查詢
-- 計算記錄數量
SELECT COUNT(*) FROM products;    # 計算記錄的數量
SELECT COUNT(name) FROM products;   #計算name字段中的數據數量  -- 不計算NULL值 -- 最大值、最小值
SELECT MAX(price), name FROM products;  #max(price),name = 查看price的最大值及該產品名字
SELECT MIN(price) FROM products;    #min(price),即最小,跟上面差不多-- 求和、平均值
SELECT SUM(price) FROM products;    # sum(price) = price的總和
SELECT AVG(price) FROM products;    # avg(price) = price的平均值

???????????????????????????????????????????????????????????????????????????????????????????

? ? ? ? 5.5.5?排序查詢
-- 單一欄位排序
SELECT * FROM products ORDER BY price DESC;    # 降序排列(大到小),不寫的話默認為升序-- 多欄位排序
SELECT * FROM products ORDER BY price DESC, id DESC;    
# 先降序排列price,若有price相同的,則降序排列id

? ? ? ? 5.5.6?分組查詢
-- 按品牌分組計算總庫存價值
SELECT brand, SUM(price * stock) as total_value
FROM products
GROUP BY brand;    #以品牌分組,相同品牌的price就相加

? ? ? ? 5.5.7? 分頁查詢
-- 限制顯示筆數
SELECT * FROM products LIMIT 10;    #即只列出前10條數據-- 分頁查詢公式:LIMIT (頁碼-1)*每頁數量, 每頁數量
SELECT * FROM products LIMIT 0, 10;   #由第1條數據開始,列10條數據
SELECT * FROM products LIMIT 10, 10;  #由第11條數據開始,列10條數據
# 數據是由0開始算起的

六、MySQL表關係

? ? ? ? 6.1 一對一關係

  • 一個表中的一條記錄與另一個表中的一條記錄有唯一對應關係

  • 範例:員工資料表與員工卡號表

? ? ? ? 6.2 一對多關係

  • 一個表中的一條記錄與另一個表中的多條記錄相關聯

  • 範例:部門表與員工表(一個部門有多個員工)

  • 實現方式:在"多"的一方設置外鍵指向"一"的一方的主鍵

? ? ? ? 6.3 多對多關係

  • 一個表中的多條記錄與另一個表中的多條記錄相關聯

  • 範例:學生表與課程表(一個學生可以選多門課,一門課可以有多個學生)

  • 實現方式:需要中間關聯表,包含兩個外鍵分別指向兩個表的主鍵

? ? ? ? 6.3.1 外鍵設置實務

在MySQL中,要使用外鍵需要確保

  1. 儲存引擎使用InnoDB

  2. 字符集排序規則一致(如utf8_general_ci)

  3. 相關欄位數據類型匹配

-- 創建帶外鍵的表格
CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,order_date DATE,FOREIGN KEY (user_id) REFERENCES users(id)ON DELETE CASCADEON UPDATE CASCADE
);

七、進階查詢技巧

? ? ? ? 7.1 UNION合併查詢

? ? ? ? 同時查詢2或以上張表的數據,並把數據豎向合并成1個表格的數據。2張表查詢的字段數必須相同。

-- 合併兩個SELECT結果(欄位數和數據類型必須相同)
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;

????????bumen表中有2個字段,emp表中有3個字段,必須限制只輸出emp中的name和age字段(2個字段)才能運行。

? ? ? ? 且并接後,emp表中的字段名不會顯示,僅bumen的字段名可見(豎向拼接)

? ? ? ? 7.2?GROUP_CONCAT函數

? ? ? ? 把輸出結果全部寫進同一行

-- 將分組結果合併為一個字符串
SELECT 1,GROUP_CONCAT(schema_name) 
FROM information_schema.SCHEMATA;

? ? ? ? 7.3 字符集處理

用cmd窗口操作時,如果遇到亂碼問題(utf8不支持中文),可以設置字符集為gbk

CHARSET gbk; -- 根據需要設置合適的字符集

八、小結

????????MySQL是一個功能強大的關聯式資料庫管理系統,掌握主鍵、外鍵、索引等核心概念以及SQL語言的基本操作是使用MySQL的基礎。正確設計表結構和關係對於確保數據完整性和查詢效率至關重要。在實際應用中,應該根據具體業務需求合理設計數據庫結構,並適當使用索引優化查詢性能。

????????對於初學者來說,建議從基礎的DDL、DML、DQL操作開始練習,逐步掌握更複雜的表關係設計和查詢技巧。隨著經驗的積累,可以進一步學習事務處理、存儲過程、觸發器等進階功能,以應對更複雜的業務場景。

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

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

相關文章

【40頁PPT】數字工廠一體化運營管控平臺解決方案(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91716541 資料解讀&#xff1a;【40頁PPT】數字工廠一體化運營管控平臺解決方案 詳細資料請看本解讀文章的最后內容。該資料圍繞數字工廠一體…

數據產品(2)用戶畫像數據分析模型

目錄 1 用戶畫像 2 RFM模型 (用戶價值分群模型) 3 PSM 價格敏感度 4 精細化運營 1 用戶畫像 也稱用戶表標簽,是基于用戶行為分析獲得的對用戶的一種認知表達,即用戶數據標簽化,通過收集與分析用戶的用戶屬性(年齡、性別、城市、職業、設備、狀態)、用戶偏好(購物偏好,聽…

03_數據結構

第3課&#xff1a;數據結構 課程目標 掌握Python的基本數據結構&#xff1a;列表、元組、字典、集合學習字符串的高級操作方法理解不同數據結構的特點和適用場景 1. 列表&#xff08;List&#xff09; 1.1 列表的創建和基本操作 # 創建列表 fruits ["蘋果", "香…

【JavaEE】多線程 -- CAS機制(比較并交換)

目錄CAS是什么CAS的應用實現原子類實現自旋鎖ABA問題ABA問題概述ABA問題引起的BUG解決方案CAS是什么 CAS (compare and swap) 比較并交換&#xff0c;CAS 是物理層次支持程序的原子操作。說起原子性&#xff0c;這就設計到線程安全問題&#xff0c;在代碼的層面為了解決多線程…

The United Nations Is Already Dead

The United Nations Is Already Dead When children in Gaza rummage through rubble for food, when UN-run schools are reduced to dust, when the Security Council cannot even pass the mildest ceasefire resolution—blocked by a single veto— we must confront a br…

Kubernetes v1.34 前瞻:資源管理、安全與可觀測性的全面進化

預計正式發布&#xff1a;2025年8月底 | 分類&#xff1a;Kubernetes 隨著2025年8月底的臨近&#xff0c;Kubernetes社區正緊鑼密鼓地準備下一個重要版本——v1.34的發布。本次更新并非簡單的功能疊加&#xff0c;而是在資源管理、安全身份、可觀測性和工作負載控制等核心領域的…

用 Bright Data MCP Server 構建實時數據驅動的 AI 情報系統:從市場調研到技術追蹤的自動化實戰

前言 本文通過兩個真實場景&#xff08;云服務商對比與 AIGC 技術追蹤&#xff09;&#xff0c;展示了如何使用 Bright Data MCP Server 與 Lingma IDE 構建一個具備實時網頁數據抓取、結構化分析與自動化報告生成能力的 AI 工作流。通過簡單的 API 調用與 JSON 配置&#xff…

牛頓第二定律的所有表達方式:1、線性表達 2、圓形表達 3、雙曲線表達 4、拋物線表達5、數列表達

牛頓第二定律是經典力學中的核心定律&#xff0c;表述為&#xff1a;物體的加速度與所受合力成正比&#xff0c;與質量成反比&#xff0c;方向與合力方向相同。其基本矢量形式為&#xff1a; F?ma? \vec{F} m \vec{a} Fma 其中&#xff0c;F?\vec{F}F 是合力&#xff08;單…

【開發日記】SpringBoot 實現支持多個微信小程序的登錄

在實際業務場景中&#xff0c;需要一個后臺同時支持多個微信小程序的登錄。例如&#xff0c;企業有多個不同業務的小程序&#xff0c;但希望統一在同一個后臺系統里進行用戶認證和數據處理。這時候&#xff0c;我們就需要一個靈活的方式來管理多個小程序的 appid 和 secret&…

Docker 容器(一)

Docker一、Docker是什么1.什么是Docker2.Docker特點3.比較虛擬機和容器二、Docker安裝1.Docker??三大核心組件??2.安裝步驟&#xff08;Ubuntu&#xff09;3.阿里云鏡像加速三、Docker鏡像1.什么是鏡像2.UnionFS&#xff08;聯合文件系統&#xff09;3.Docker鏡像加載原理4…

容器安全實踐(二):實踐篇 - 從 `Dockerfile` 到 Pod 的權限深耕

在上一篇《容器安全實踐&#xff08;一&#xff09;&#xff1a;概念篇》中&#xff0c;我們深入探討了容器安全的底層原理&#xff0c;并糾正了“容器天生安全”的誤解。我們了解了 root 用戶的雙重身份&#xff0c;以及特權容器的危險性。 然而&#xff0c;僅僅了解這些概念…

c#_數據持久化

數據持久化架構 數據是應用程序的命脈。持久化架構的選擇直接決定了應用的性能、可擴展性、復雜度和維護成本。本章將深入探討.NET生態中主流的數據訪問模式、工具和策略&#xff0c;幫助你為你的系統做出最明智的數據決策。5.1 ORM之爭&#xff1a;Entity Framework Core深度剖…

996引擎-骰子功能

996引擎-骰子功能 測試NPC QF回調函數 結果 參考資料 在測試NPC播放骰子動畫。 播放前需要先設置骰子點數 測試NPC [[骰子的顯示順序和點數 對應 私人變量 D0 D1 D2 D3 D4 D5]] -- NPC入口函數 function main(player)-- 骰子共6個,設置骰子點數后,再執行搖骰子,否則沒動畫…

Vue 3多語言應用開發實戰:vue-i18n深度解析與最佳實踐

&#x1f4d6; 概述 Vue 3 國際化&#xff08;i18n&#xff09;是構建多語言應用的核心需求。本文檔介紹 Vue 3 中實現國際化的主流方案&#xff0c;包括 vue-i18n、Vite 插件方案和自定義解決方案。 &#x1f3af; 主流方案對比 方案優點缺點適用場景vue-i18n功能完整、生態成…

港口船舶流量統計準確率↑27%!陌訊多模態融合算法實戰解析

一、行業痛點&#xff1a;港口船舶流量統計的三大核心難題智慧港口建設中&#xff0c;船舶流量統計是泊位調度、航道管理與安全預警的核心數據支撐&#xff0c;但傳統方案受場景特性限制&#xff0c;長期存在難以解決的技術瓶頸。據《2023 年中國港口智能化發展報告》顯示&…

Shell腳本的基礎知識學習

Shell 腳本是 Linux/Unix 系統的核心自動化工具&#xff0c;能夠完成以下任務&#xff1a; &#xff08;1&#xff09;批量操作&#xff1a;一鍵安裝軟件、批量處理文件&#xff08;重命名、壓縮、備份等&#xff09;。 &#xff08;2&#xff09;系統管理&#xff1a;監控資源…

k8s部署,pod管理,控制器,微服務,集群儲存,集群網絡及調度,集群認證

k8s部署 k8s中容器的管理方式 ? Kubernetes集群創建方式 centainerd 默認情況下&#xff0c;K8S在創建集群時使用的方式 docker docker使用的普記錄最高&#xff0c;雖然K8S在1.24版本后已經費力了kubelet對docker的支持&#xff0c;但時可以借助cri-docker方式來實現集…

JAVA限流方法

在 Java 項目中限制短時間內的頻繁訪問&#xff08;即接口限流&#xff09;&#xff0c;是保護系統資源、防止惡意攻擊或高頻請求導致過載的重要手段。常見實現方案可分為單機限流和分布式限流&#xff0c;以下是具體實現方式&#xff1a;一、核心限流算法無論哪種方案&#xf…

性能比拼: .NET (C#) vs. Fiber (Go)

本內容是對知名性能評測博主 Anton Putra .NET (C#) vs. Fiber (Go): Performance (Latency - Throughput - Saturation - Availability) 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 在本視頻中&#xff0c;我們將對比 C# 與 .NET 框架和 Golang 的表現。在第一個…

信譽代幣的發行和管理機制是怎樣的?

信譽代幣的發行與管理機制是區塊鏈技術與經濟模型深度融合的產物&#xff0c;其核心在于通過代碼和社區共識構建可量化、可驗證的信任體系。以下從技術架構、經濟模型、治理機制三個維度展開分析&#xff0c;并結合具體案例說明&#xff1a;一、發行機制&#xff1a;行為即價值…