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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;行为即价值…