mysql8.0筆記

1.DDL數據定義語言

DDL是什么——————創建、修改、刪除 數據庫和表結構的命令。

基本語法

針對數據庫的操作

-- 創建數據庫
CREATE DATABASE 數據庫名;
-- 比如
CREATE DATABASE myschool;
--查看所有數據庫
SHOW DATABASES;
--使用某個數據庫
USE myschool;
-- 刪除數據庫//需謹慎
DROP DATABASE myschool;

針對表的操作

-- 創建表
CREATE TABLE 表名 (字段名1 數據類型,字段名2 數據類型,...
);
-- 比如
CREATE TABLE LI(
name VARCHAR(10),
age INT,
hobby VARCHAR(20);
)--1.2.2 數據類型(常用)
--表格
--復制
--類型	說明	例子
--INT	整數	10, 20
--VARCHAR(n)	字符串	'張三'
--DATE	日期	'2025-08-09'
--FLOAT	小數	3.14--查看當前數據庫的所有表
SHOW TABLES;
--查看表結構
DESC students;
--刪除表
DROP TABLE students;-- 修改表結構(ALTER)
--添加一列
ALTER TABLE students ADD COLUMN email VARCHAR(50);
--刪除一列
ALTER TABLE students DROP COLUMN email;
--修改列名或類型
ALTER TABLE students CHANGE COLUMN name fullname VARCHAR(30);
-- COLUMN :列  ALTER ;改變
--“建庫用 CREATE,看庫用 SHOW,用庫寫 USE,刪庫要小心!”
--“建表寫 CREATE TABLE,看表結構用 DESC,改表結構用 ALTER。”

小練習

1.創建一個數據庫叫 testdb
2.創建一個表叫 users,字段有:id INT,username VARCHAR(20)
3.查看表結構
4.添加一個字段 email VARCHAR(50)
5.刪除這個表

1
CREATE DATABASE testdb;
2
CREATE TABLE users(
id INT,
username VARCHAR(20)
);
3
DESC users;
4 
ALTER TABLE users ADD COLUMN email VARCHAR(50);
5
DROP TABLE users;

2.DML (Data Manipulation Language)數據操縱語言

核心語法

插入數據(INSERT)

假設我們已經有了這張表

CREATE DATABASE testdb;
USE testdb;CREATE TABLE users (id INT,username VARCHAR(20),email VARCHAR(50)
);

但是現在我們想給這個數據庫表插入數據我們可以選擇運行

-- 單個數據插入
INSERT INTO users (id, username, email)
VALUES 
(1, '張三', 'zhangsan@qq.com');

這樣子我們就有了張三這個數據庫實例

當然一個一個添加太麻煩了我們可以批量添加

-- 多個數據插入
INSERT INTO users (id, username, email)
VALUES 
(2, '李四', 'lisi@qq.com'),
(3, '王五', 'wangwu@qq.com');

相對于來說就是加個逗號結尾還是用常規結束符;
我們也可以選擇插入部分字段(其余為NULL)

-- 插入部分字段(其余為NULL)
INSERT INTO users (id, username)
VALUES (4, '趙六');
數據修改(UPDATE)
UPDATE users
SET email = 'new_email@qq.com'
WHERE id = 1;-- 意為修改id=1 的email為'new_email@qq.com'
數據刪除(DELETE)
--從users表中刪除一個id=4的數據
DELETE FROM users
WHERE id = 4;
練習

1插入 3 個用戶:張三、李四、王五
2把張三的郵箱改成 zhangsan@new.com
3刪除王五
4查看剩下的人

1
INSERT INTO users(username)
VALUES
('張三'),
('李四'),
('王五');
2
UPDATE users SET email ='zhangsan@new.com' WHERE username ='張三'
3
DELETE FROM users WHERE username ='王五'
4
SELECT * FROM users;

3.約束

什么是約束?

約束就是給表里的字段加“規矩”,讓數據不能亂填,保證數據的正確性和一致性

3.1主鍵約束(PRIMARY KEY)

作用:唯一標識一條記錄(就像身份證號)
要求:不能重復,不能為 NULL
通常配合:AUTO_INCREMENT(自動增長)(常用于id)

-- id 會自動從 1、2、3……往上加,保證每個學生都有獨一無二的編號。
CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT
);

聯合主鍵

由多個列組成的主鍵稱為聯合主鍵:

CREATE TABLE student (
student_id INT,
seat_id INT ,
...
PRIMARY KEY (student_id,seat_id))

修改表結構添加主鍵

ALTER TABLE student ADD PRIMARY KEY(cours_id )

刪除主鍵

ALTER TABLE student  DROP PRIMARY KEY;

3.2非空約束(NOT NULL)

作用:這個字段必須填,不能空著

name VARCHAR(20) NOT NULL
-- 如果你插入數據時不寫 name,就會報錯!

3.3唯一約束(UNIQUE)

作用:這個字段的值不能重復

email VARCHAR(50) UNIQUE
-- 兩個人的郵箱不能一樣,否則會報錯。

3.4默認值約束(DEFAULT)

作用:如果你不填這個字段,就用默認值

age INT DEFAULT 18
-- 插入數據時不寫 age,MySQL 自動填 18。

3.5零填充約束(ZEROFILL)!! mysql8.0以后版本已刪除

作用:數字前面自動補 0

student_number INT(4) ZEROFILL
-- 插入 1,實際顯示 0001;插入 25,顯示 0025。

3.6自增約束(AUTO_INCREMENT)

作用:每次插入數據,自動加 1
只能用于:整數類型,并且必須是 主鍵 或 唯一鍵

id INT PRIMARY KEY AUTO_INCREMENT
-- 你不需要手動寫 id,MySQL 幫你自動填。

3.7外鍵約束(FOREIGN KEY) (重點)!!!

作用:讓兩個表產生“關聯”,保證數據一致性

class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(id)
-- 學生表里的 class_id 必須是班級表里已經存在的 id,否則插不進去。

一、想像兩份 Excel 表
班級表

idclass_name
1三年二班
2四年一班

學生表

idnameclass_id
1張三1 → 指向三年二班
2李四2 → 指向四年一班
3王五99 → ? 指向一個根本不存在的班級!

如果允許王五這條記錄存在,數據就“臟”了。
外鍵的作用就是:
“students 表里的 class_id 只能填 classes 表里已經出現過的 id”

我們先創建一個父表

CREATE TABLE classes (id   INT PRIMARY KEY AUTO_INCREMENT,class_name VARCHAR(20)
);

再建(子表),并聲明外鍵

CREATE TABLE students (id       INT PRIMARY KEY AUTO_INCREMENT,name     VARCHAR(20) NOT NULL,class_id INT,-- 外鍵聲明:students.class_id 必須來自 classes.idCONSTRAINT fk_stu_clsFOREIGN KEY (class_id) --外鍵REFERENCES classes(id)
);

說明:
? fk_stu_cls 是外鍵的名字,可以隨便取,最好見名知意。
? 數據類型必須一致:students.class_id 與 classes.id 都是 INT。
在這里插入圖片描述
在這里插入圖片描述
一對多關系-創建外鍵約束

CREATE TABLE  father_table (
id INT PRIMARY KEY,
son_id INT 
);
CREATE TABLE son_table (
id INT PRIMARY KEY ,
father_id INT,
FOREIGN KEY (father_id) REFERENCES father_table(son_id)
);.

在這里插入圖片描述

練習1:外鍵創建

創建一個
orders 訂單表,包含訂單ID、訂單號、客戶ID、訂單日期字段,其中客戶ID作為外鍵引用
customers 表的主鍵。

練習2:外鍵驗證

向e
mployees 表中插入一條dept_id為100的記錄,會發生什么?為什么?

練習3:復合外鍵

如何創建一個
order_items 表,使其包含訂單ID和產品ID兩個外鍵,分別引用
orders 和
products
表?

刪除外鍵


-- 查看表
SHOW CREATE TABLE 表名;
-- 刪除外鍵
ALTER TABLE 表名 DROP  FOREIGN KEY 外鍵名;

4.查詢

DQL = Data Query Language,就是用來 查詢數據 的語言。它的核心命令是 SELECT。

簡單查詢

-- 查詢表的所有列
SELECT * FROM studentl;
-- 查詢指定列
SELECT name, age, id FROM student
-- 給予列別名
SELECT name AS 姓名 , age AS 年齡,  her AS MY_LOVE FROM student;-- 去重
SELECT DISTINCT id  FROM student;

條件查詢(WHERE 子句)

在這里插入圖片描述

-- 等于
SELECT * FROM students WHERE age = 18;
-- 不等于
SELECT * FROM LOVE WHERE age != 20;
-- 大于
SELECT * FROM students WHERE score > 80;-- BETWEEN...AND
SELECT * FROM LOVE WHERE lover BETWEEN she love me AND I love she ;
-- IN 
SELECT * FROM TOBELOVE WHERE  IAM IN her heart;
-- IS NULL
SELECT * FROM  why_she WHERE my-heart IS NULL ;
-- 邏輯運算符
SELECT * FROM LOVE WHERE me = 'Remance' AND me = 'rich' AND	 me = 'love she '

常用查詢

排序查詢
-- 升序 上小下大
SELECT * FROM  MYBRO ORDER BY AGE ASC;
-- 降序 上大下小
SELECT * FROM  MYBRO ORDER BY AGE DESC;
-- 多列排序
SELECT * FROM students ORDER BY id ASC, age DESC;

聚合查詢

在這里插入圖片描述

-- 統計總數
SELECT COUNT(*) AS 好友總數 FROM friends;
-- 統計我列表的男性總數
SELECT COUNT(*) AS 我的好兄弟有多少 FROM friends WHERE  gender = '男'-- 計算平均身高
select COUNT(*) AS 平均身高 FROM  men_high;
-- 計算總成績
SELECT SUM(score) AS 總成績 FROM students;
-- 最高分和最低分
SELECT MAX(score) AS 最高分, MIN(score) AS 最低分 FROM students;

聚合查詢-null值處理
COUNT(*) 包含NULL值的行
COUNT(列名) 不包含NULL值的行
SUM、AVG、MAX、MIN 忽略NULL值

分組查詢

分組查詢: GROUP BY 列名;
分組后篩選: HAVING 條件;

-- 按班級分組,統計每個班級的學生數量
SELECT class_id, COUNT(*) AS 學生數量 FROM students GROUP BY class_id;
-- 按班級分組,計算每個班級的平均成績
SELECT class_id, AVG(score) AS 平均成績 FROM students GROUP BY class_id;
-- 分組后篩選,只顯示學生數量大于2的班級
SELECT class_id, COUNT(*) AS 學生數量 FROM students GROUP BY class_id HAVING COUNT(*) >2; 
分頁查詢

核心內容
分頁查詢: LIMIT 偏移量, 每頁數量;
偏移量從0開始

-- 每頁顯示2條數據,查詢第一頁
SELECT * FROM students LIMIT 0, 2;
-- 每頁顯示2條數據,查詢第三頁
SELECT * FROM students LIMIT 2, 2
練習題
  1. 什么是約束?MySQL支持哪些類型的約束?
 約束 是一組規則,用于限制表中數據的類型、取值范圍或數據之間的關系,從而保證數據的完整性和一致性
約束類型關鍵字作用說明
主鍵約束PRIMARY KEY唯一標識每一行記錄,不能為 NULL,且不能重復。
唯一約束UNIQUE保證某列或某組合列的值唯一,但允許 NULL(不同版本對 NULL 的處理略有差異)。
非空約束NOT NULL禁止該列的值為 NULL。
默認值約束DEFAULT當未指定值時,自動使用默認值。
外鍵約束FOREIGN KEY建立表與表之間的關系,確保引用完整性(子表中的值必須在父表中存在)。
檢查約束CHECK限制列中的值必須滿足特定條件(MySQL 8.0.16+ 才支持,早期版本語法支持但無效)。
  1. 簡述主鍵約束和唯一約束的區別。
對比項主鍵約束(PRIMARY KEY)唯一約束(UNIQUE)
是否允許 NULL不允許允許(可有多條 NULL)
表中個數只能有 1 個(或復合主鍵 1 組)可以有多個
用途唯一標識整行記錄僅保證列值不重復
自動索引自動創建聚簇索引自動創建二級索引
  1. 自增約束有哪些特點?

  2. 在這里插入圖片描述

  3. 編寫SQL語句,查詢students表中年齡大于20且成績大于85的學生信息。

SELECT * FROM students WHERE age > 20 AND grand > 85;
  1. 編寫SQL語句,按班級分組,統計每個班級的學生數量和平均成績,并按平均成績降序排序。
SELECTclass_id,COUNT(*)  AS student_count,AVG(score) AS avg_score
FROMstudents
GROUP BYclass_id
ORDER BYavg_score DESC;
  1. 編寫SQL語句,查詢students表中成績排名前3的學生信息
SELECT *
FROM students
ORDER BY score DESC
LIMIT 3;

聯合查詢

聯合查詢是同時查詢多個表中的數據,包括

交叉連接(CROSS JOIN)

交叉連接(CROSS JOIN)是 SQL 中最簡單、最暴力的一種多表查詢方式。它把左表的每一行和右表的每一行全部拼在一起,形成一張“大表”。
實際生產中很少直接使用,除非:
你想生成笛卡爾積(例如做組合測試、窮舉所有配對)。
兩張表本來就很確定只有 1 行(比如常量表)。

語法示例
-- 顯式寫法
SELECT *
FROM A
CROSS JOIN B;-- 隱式寫法(逗號分隔,效果相同,但不推薦)
SELECT *
FROM A, B;
內連接查詢

內連接(INNER JOIN)是關系型數據庫里最常用、最“安全”的連接方式。它只保留兩張表中滿足連接條件的行,其余全部丟棄,因此結果集不會爆炸,語義也最貼近“匹配”這一業務需求。

SELECT * FROM table1 INNER JOIN table2 ON 連接條件;-- 或
SELECT * FROM table1 JOIN table2 ON 連接條件;-- 或(隱式內連接)
SELECT * FROM table1, table2 WHERE 連接條件-- 顯式內連接
SELECT e.id, e.name, d.name AS dept_name, e.salary 
FROM employees e INNER JOIN departments d 
ON e.dept_id = d.id;-- 隱式內連接
SELECT e.id, e.name, d.name AS dept_name, e.salary 
FROM employees e, departments d 
WHERE e.dept_id = d.id

比如現有兩個表

Employees(emp_id, dept_id, name)Departments(dept_id, dept_name)
1, 10, ‘Alice’10, ‘Sales’
2, 20, ‘Bob’30, ‘HR’
3, 10, ‘Cara’

我們運行


SELECT e.emp_id, e.name, d.dept_name
FROM Employees AS e
JOIN Departments AS dON e.dept_id = d.dept_id;

結果為

emp_idnamedept_name
1AliceSales
3CaraSales

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

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

相關文章

大模型微調【1】之入門

文章目錄說明一 大模型微調技術1.1 微調基礎1.2 量化概念1.3 高效微調方法LoRA&QLoRA1.4 LoRA VS QLoRA1.5 高效微調的應用場景二 主流微調工具2.1 unsloth2.2 LLama-Factory2.3 ms-SWIFT2.4 ColossalAI2.5 底層微調框架推薦2.6 模型性能評估框架EvalScope三 微調所需軟硬件…

深入解析Linux poll()系統調用

🔄 Linux poll() 系統調用詳解一、poll 是干什么的?poll 是 Linux(及 POSIX 標準)中用于實現 I/O 多路復用(I/O Multiplexing) 的系統調用,它的核心作用是:讓一個線程能夠同時監視多…

文獻閱讀 | PLoS ONE | SRplot:一個免費的在線平臺,用于數據可視化和圖形

文獻介紹文獻題目: SRplot:一個免費的在線平臺,用于數據可視化和圖形 研究團隊: Yewei Wang(中南大學湘雅二醫院) 發表時間: 2023-11-09 發表期刊: PLoS ONE 影響因子: 3…

分布式與微服務寶典

分布式理論基礎 1、分布式架構有哪些特點,優勢和缺陷 特點:微服務架構的優點微服務架構的缺陷自由使用不同技術增加故障排除挑戰每一個微服務都側重于單一功能由于遠程調用增加延遲支持單個可部署單元增加了配置與其他操作的工作量允許經常發布軟件難以保…

利用生成式AI與大語言模型(LLM)革新自動化軟件測試 —— 測試工程師必讀深度解析

引言 自動化測試是現代軟件工程的基石,然而,隨著軟件復雜度和迭代速度的飛速提升,傳統自動化測試方法正面臨越來越多的挑戰。 近年來,生成式人工智能(Generative AI)和大語言模型(LLM&#xff0…

JS 與 C++ 雙向通信實戰:基于 WebHostViewListener 的消息處理機制

前言在現代瀏覽器和桌面應用開發中,WebView 嵌入已經成為一種非常常見的 UI 技術方案。無論是基于 Chromium 的 CEF(Chromium Embedded Framework)、Qt WebEngine,還是自研瀏覽器內核,嵌入 WebView 都能帶來極高的靈活…

模板打印技術——Office XLS 打印模板:為政務土地確權定制的紙張替換利器—仙盟創夢IDE

代碼public static int cyberwin_replaceExcelandoutputPrint(string fisrcpathleurl, DataTable dtInfo, string despath){if (File.Exists(despath) true){//刪除目標文件File.Delete(despath);}File.Copy(fisrcpathleurl, despath);string 目標文件 despath;MSEXCEL.Appli…

可直接運行的 Playwright C# 自動化模板

目錄 目錄結構 1. appsettings.json(賬號、URL、路徑配置) 2. Program.cs(啟動入口) 3. SchedulerConfig.cs(定時調度) 4. SocialSecurityTask.cs(自動報社保任務) 5. QuerySo…

云平臺監控-云原生環境Prometheus企業級監控實戰

目錄 一、基于 Kubernetes 的 Prometheus 監控方案概述 1. 核心組件及功能 2. 監控流程詳解 3. 關鍵監控指標說明 二、Prometheus 與相關組件部署 1. 克隆項目代碼 2. 安裝 Prometheus Operator 3. 安裝 Prometheus Stack 4. 查看容器運行狀態 三、ServiceMonitor 配…

GPT-5 有點不太順

GPT-5 有點不太順 OpenAI 的新模型 GPT-5 盼了很久,結果一上線就問題不少。 發布會剛過,CEO 山姆?奧特曼就說,要給部分用戶恢復 GPT-4o 這些老模型的使用權限,還承認 GPT-5 上線 “比預想的坎坷”。 簡單題都做錯了 不少用戶發現,GPT-5 連一些簡單問題都答不對,比之前…

《卷積神經網絡(CNN):解鎖視覺與多模態任務的深度學習核心》

1.概述卷積神經網絡(CNN)是深度學習在計算機視覺領域的重要突破,專為處理網格狀數據(如圖像)設計,后也擴展到自然語言處理等領域。它解決了全連接網絡處理大圖像時計算代價高、特征保留差的問題&#xff0c…

React Native + Expo搭建APP項目+安卓模擬器

Expo 嘗試一下就好,畢竟參考代碼太少,相當于閉關造輪子,不建議。 一、需要的工具 1. node.js,推薦使用(TLS版本),版本不是太低就行,測試用的v20.12.2的Node 2. 開發工具 VS CODE或…

第六十五章:AI的“精良食材”:圖像標注、視頻幀抽幀與字幕提取技巧

ai 數據處理前言:從“原始食材”到“AI盛宴”第一章:圖像標注:為AI“指點江山”1.1 什么是圖像標注?—— AI的“視覺標簽”1.2 分類任務:圖像的“身份識別”1.3 目標檢測:圖像的“區域識別”與“邊界框”1.…

2025 開源語音合成模型全景解析:從工業級性能到創新架構的技術圖譜

一、引言:開源浪潮下的語音合成技術躍遷 語音合成(TTS)作為人工智能領域的核心技術,近年來在開源社區的推動下取得了突破性進展。從早期的基于規則的拼接合成,到深度學習驅動的端到端模型,再到當前與大語言…

前端懶加載技術全面解析

懶加載(Lazy Loading)是一種優化前端性能的重要技術,核心思想是延遲加載非關鍵資源,只在需要時加載它們。 一、懶加載的基本原理 懶加載的核心思想是通過以下方式優化性能: 減少初始加載實踐: 只加載首屏所需資源 節省帶寬和內存: 避免加載用戶可能不會查看的內容 提高…

B3DM,OSGB,PLY,OBJ,S3MB,I3S這幾種格式有什么區別

B3DM、OSGB、PLY、OBJ、S3MB、I3S 都是三維模型/地理空間數據的文件格式,但它們的用途、結構和適用場景差別很大。1. B3DM(Batched 3D Model)來源/用途:屬于 Cesium 3D Tiles 規范,用于在 Cesium、Mapbox 這種 WebGIS …

Matlab(4)

一、Basic plotting1.plot()plot(x,y) :x圖片中點的橫坐標,y圖片中點的縱坐標plot(y) :y圖片中點的縱坐標,x圖片中點的橫坐標默認為1,2,3,4,5........plot(co…

Pycharm選好的env有包,但是IDE環境顯示無包

一、異常現象 Pycharm選好的env(yolov7): 有Numpy這個包: IDE環境愣是報沒有: 二、嘗試解決 2.1 重新啟動pycharm 重新打開.py文件: 還是不行: 看看好使的windows上的pycharm參數&#xff1a…

深入理解 Linux 下的 GDB 調試工具

引言 在軟件開發中,調試是一個不可避免且至關重要的環節。無論是簡單的邏輯錯誤,還是復雜的內存泄漏問題,調試工具都能幫助我們快速定位并修復問題。而在 Linux 系統中,GDB(GNU 調試器)是最強大、最常用的…

讓齒輪與斑馬線共舞:汽車文化驛站及安全教育基地的展陳實踐

當汽車文化驛站及安全教育基地的展陳項目圖紙在繪圖儀上初現輪廓時,我們就明確了一個核心命題:如何讓 “速度與激情” 的汽車文化,與 “規則與敬畏” 的安全教育在同一空間里和諧共生,而非簡單拼接。這不是兩個獨立展區的物理疊加…