当前位置: 首页 > news >正文

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.dtcms.com/a/348453.html

相关文章:

  • Run-Command:高效便捷的命令行工具
  • 46.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成日志
  • ArticulateX:通过发音器官空间实现端到端单语语音翻译的突破
  • Vue vs React:前端框架的差异与选择
  • LabVIEW调用MATLAB 的分形生成
  • AMD KFD驱动分析系列0:HSA(异构系统架构)驱动概览
  • 海盗王3.0客户端从32位升级64位之路
  • Redis如何高效安全的遍历所有key?
  • 音视频学习(五十五):H264中的profile和level
  • DAY 55 序列预测任务介绍
  • 基于深度学习的餐盘清洁状态分类
  • 【Protues仿真】基于AT89C52单片机的温湿度测量
  • Linux的线程概念与控制
  • 高并发内存池(1)-定长内存池
  • 阿里开源通义万相Wan2.2:视频生成技术的革命性突破
  • MR椎间盘和腰椎分割项目:基于深度学习的医学图像分析
  • Linux系统之Centos7安装cockpit图形管理界面
  • 项目学习总结(5)
  • python---构造函数、析构函数
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘gunicorn’问题
  • 【springboot 技术代码】集成mongodb 详细步骤
  • localhost和127.0.0.1的区别
  • 界面规范7-可左右拖动的分割条
  • MATLAB GUI 设计入门:用 Guide 工具快速搭建交互界面
  • React Hooks useEffect的使用
  • React 18+ 并发模式异常
  • Linux服务测试题(DNS,NFS,DHCP,HTTP)
  • pytorch线性回归(二)
  • ⭐CVPR2025 病理分析全能模型 CPath-Omni 横空出世
  • RAG智能问答为什么需要进行Rerank?