
Day01 - 軟測 Mysql
1. 數(shù)據(jù)庫核心基礎(chǔ)
1.1 學(xué)習(xí)數(shù)據(jù)庫的意義
- 90%以上軟件需存儲/操作數(shù)據(jù),數(shù)據(jù)庫是軟件基礎(chǔ)。
- 測試工程師需通過數(shù)據(jù)庫校驗(yàn)數(shù)據(jù)正確性,定位深層問題(如注冊成功但登錄失敗,需檢查數(shù)據(jù)是否存入數(shù)據(jù)庫)。
1.2 數(shù)據(jù)庫發(fā)展階段
- 人工管理階段:人工整理保存,查詢不便。
- 文件系統(tǒng)階段:數(shù)據(jù)存儲為文件,管理較人工便捷,但查詢?nèi)月闊?/li>
- 數(shù)據(jù)庫階段:長期存儲、有組織的數(shù)據(jù)集合,數(shù)據(jù)按表分類存儲,查詢高效。
1.3 關(guān)系型數(shù)據(jù)庫
- 定義:由多張有關(guān)聯(lián)的表組成的數(shù)據(jù)庫。
- 核心元素:數(shù)據(jù)庫(表的集合)、表(二維表格,存儲數(shù)據(jù)的基本單位)、行(記錄)、列(字段)。
- 主流產(chǎn)品:Oracle(大型項(xiàng)目)、MySQL(web 領(lǐng)域廣泛使用)、Microsoft SQL Server(微軟平臺)、SQLite(移動(dòng)平臺)。
1.4 MySQL 特點(diǎn)
- 開源、免費(fèi)、支持多平臺(Linux/Windows/UNIX)。
- 支持多種編程語言API(C/C++/Python/Java等)。
- 查詢算法優(yōu)化,可處理千萬級記錄,使用標(biāo)準(zhǔn)SQL語言。
1.5 SQL 語言概述
- 定義:結(jié)構(gòu)化查詢語言,用于操作所有關(guān)系型數(shù)據(jù)庫。
- 分類:DQL(數(shù)據(jù)查詢,如select)、DDL(數(shù)據(jù)定義,如create/drop)、DML(數(shù)據(jù)操作,如insert/update/delete)、TPL(事務(wù)處理,如commit/rollback)。
- 特性:不區(qū)分大小寫。
2. Navicat 基本使用
2.1 連接 MySQL
- 操作步驟:打開Navicat→點(diǎn)擊“連接”-MySQL→填寫連接名(如local)、主機(jī)名(localhost)、端口(3306)、用戶名(root)、密碼→測試連接→確定→雙擊連接名即可訪問數(shù)據(jù)庫。
2.2 數(shù)據(jù)庫操作
- 創(chuàng)建數(shù)據(jù)庫:右鍵連接名→新建數(shù)據(jù)庫→輸入數(shù)據(jù)庫名(如student)→字符集選utf8→排序規(guī)則選utf8_general_ci→確定。
- 使用數(shù)據(jù)庫:右鍵目標(biāo)數(shù)據(jù)庫→打開數(shù)據(jù)庫(后續(xù)操作需在此狀態(tài)下進(jìn)行)。
- 修改數(shù)據(jù)庫:右鍵數(shù)據(jù)庫→編輯數(shù)據(jù)庫,可修改字符集和排序規(guī)則(數(shù)據(jù)庫名不可改)。
- 刪除數(shù)據(jù)庫:右鍵數(shù)據(jù)庫→刪除數(shù)據(jù)庫。
2.3 SQL 編寫與運(yùn)行
- 新建查詢:選中數(shù)據(jù)庫→點(diǎn)擊“查詢”→新建查詢。
- 運(yùn)行SQL:編寫代碼后點(diǎn)擊“運(yùn)行”,或按Ctrl+R快捷鍵。
- 示例:運(yùn)行
select now();可查詢系統(tǒng)當(dāng)前日期時(shí)間。
3. SQL 核心語法
3.1 注釋規(guī)則
- 單行注釋:
-- 注釋內(nèi)容(--與文字間需空格)。 - 多行注釋:
/* 注釋內(nèi)容 */。 - 快捷鍵:Ctrl+/(快速注釋)、Ctrl+Shift+/(取消注釋)。
3.2 常用數(shù)據(jù)類型
- 整數(shù):int(有符號范圍-21474836482147483647,無符號04294967295)、tinyint(有符號-128127,無符號0255)。
- 小數(shù):decimal(總位數(shù), 小數(shù)位數(shù)),如decimal(5,2)(3位整數(shù)+2位小數(shù))。
- 字符串:varchar(長度),如varchar(10)(最多存10個(gè)字符,中文/字母均占1位)。
- 日期時(shí)間:datetime(范圍1000-01-01 00:00:00~9999-12-31 23:59:59)。
3.3 表操作(DDL)
- 創(chuàng)建表:
create table 表名(字段名 數(shù)據(jù)類型, 字段名 數(shù)據(jù)類型...);- 示例:
create table c(id int, name varchar(20), age tinyint unsigned);
- 示例:
- 刪除表:
drop table 表名;(直接刪除)或drop table if exists 表名;(存在則刪除)。
3.4 數(shù)據(jù)操作(DML)
3.4.1 插入數(shù)據(jù)(insert)
- 全字段插入:
insert into 表名 values(值1, 值2...);(值順序與字段順序一致)。 - 部分字段插入:
insert into 表名(字段1, 字段2...) values(值1, 值2...);。 - 批量插入:
insert into 表名 values(值1...),(值2...);或insert into 表名(字段1...) values(值1...),(值2...);。 - 注意:字符串需用單/雙引號包裹,數(shù)字可省略引號。
3.4.2 查詢數(shù)據(jù)(select)
- 查詢所有字段:
select * from 表名;。 - 查詢指定字段:
select 字段1, 字段2... from 表名;。
3.4.3 修改數(shù)據(jù)(update)
- 語法:
update 表名 set 字段1=值1, 字段2=值2... where 條件;(無where則修改所有記錄)。 - 示例:
update c set name='狄仁杰', age=20 where id=2;。
3.4.4 刪除數(shù)據(jù)(delete/truncate)
- delete:
delete from 表名 where 條件;(無where刪除所有記錄,速度較慢)。 - truncate:
truncate table 表名;(刪除所有數(shù)據(jù),保留表結(jié)構(gòu),速度快,自增字段恢復(fù)從1開始)。
4. 字段約束
4.1 常用約束
- 主鍵(primary key):值不可重復(fù),搭配auto_increment實(shí)現(xiàn)自動(dòng)增長。
- 非空(not null):字段必須填寫值,不可為空。
- 唯一(unique):字段值不可重復(fù)。
- 默認(rèn)值(default):未填寫時(shí)使用默認(rèn)值,填寫則以填寫值為準(zhǔn)。
4.2 約束使用示例
- 主鍵+自增長:
create table d(id int unsigned primary key auto_increment, name varchar(10), age int);- 插入時(shí)可省略id:
insert into d(name, age) values('慈禧',65);,或用0/null占位:insert into d(id, name, age) values(0, '乾隆',60);。
- 插入時(shí)可省略id:
- 非空約束:
create table e(id int unsigned, name varchar(10) not null, age int);(name字段必須賦值)。 - 唯一約束:
create table f(id int, name varchar(10) unique, age int);(name字段值不可重復(fù))。 - 默認(rèn)值約束:
create table g(id int, name varchar(10), age int default 30);(未填age則默認(rèn)30)。
Day02 - 軟測 Mysql
1. 數(shù)據(jù)查詢基礎(chǔ)
- 查詢所有字段:
select * from 表名;(例:select * from students;) - 查詢指定字段:
select 字段1,字段2... from 表名;(例:select name,sex,age from students;) - 字段別名:
select 字段 as 別名 from 表名;(as可省略,例:select name 姓名 from students;) - 表別名:
select 字段 from 表名 as 別名;(as可省略,例:select name from students s;) - 消除重復(fù)記錄:
select distinct 字段 from 表名;(例:select distinct sex from students;)
2. 條件查詢(where子句)
2.1 語法
select 字段 from 表名 where 條件;(篩選符合條件的記錄行)
2.2 支持的運(yùn)算符
- 比較運(yùn)算:
=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、!=/<>(不等于) - 邏輯運(yùn)算:
and(同時(shí)滿足)、or(任一滿足)、not(取反) - 模糊查詢(like):
%(任意多個(gè)字符)、_(單個(gè)任意字符)(例:name like '孫%'、name like '孫_') - 范圍查詢:
in(非連續(xù)范圍,例:hometown in('北京','上海'))、between...and...(連續(xù)范圍,例:age between 25 and 30) - 空判斷:
is null(空值)、is not null(非空值)(注意:null與空字符串''不同)
2.3 拓展使用
- update中:
update 表名 set 字段=值 where 條件;(例:修改指定學(xué)生班級) - delete中:
delete from 表名 where 條件;(例:刪除指定學(xué)生記錄)
3. 數(shù)據(jù)排序(order by)
3.1 語法
select 字段 from 表名 order by 字段1 asc|desc, 字段2 asc|desc...
-
asc:升序(默認(rèn),可省略) -
desc:降序 - 多字段排序:字段1值相同時(shí),按字段2排序
3.2 示例
- 升序:
select * from students order by age; - 多字段排序:
select * from students order by age desc, studentNo asc;
4. 聚合函數(shù)
4.1 核心函數(shù)(5種)
| 函數(shù) | 作用 | 示例 |
|---|---|---|
| count(字段/*) | 統(tǒng)計(jì)記錄數(shù) |
count(*)(總記錄數(shù))、count(name)(非空name數(shù)) |
| max(字段) | 求最大值 |
max(age)(最大年齡) |
| min(字段) | 求最小值 |
min(age)(最小年齡) |
| sum(字段) | 求和 |
sum(age)(年齡總和) |
| avg(字段) | 求平均值 |
avg(age)(平均年齡) |
4.2 注意事項(xiàng)
- 不能在where子句中使用
- 不能與普通字段同時(shí)出現(xiàn)在查詢結(jié)果中(單獨(dú)使用或搭配分組)
5. 數(shù)據(jù)分組(group by)
5.1 語法
select 分組字段, 聚合函數(shù) from 表名 group by 分組字段;
- 目的:將相同字段值的記錄歸為一組,對每組執(zhí)行聚合統(tǒng)計(jì)
5.2 分組后篩選(having)
- 語法:
select 分組字段, 聚合函數(shù) from 表名 group by 分組字段 having 條件; - 與where的區(qū)別:where篩選原始數(shù)據(jù),having篩選分組結(jié)果;having可使用聚合函數(shù),where不可
5.3 示例
- 統(tǒng)計(jì)各性別人數(shù):
select sex, count(*) from students group by sex; - 篩選分組結(jié)果:
select sex, count(*) from students group by sex having sex='男';
6. 數(shù)據(jù)分頁(limit)
6.1 基礎(chǔ)語法
select 字段 from 表名 limit start, count;
-
start:起始索引(從0開始,可省略,默認(rèn)從0開始) -
count:獲取的記錄條數(shù)
6.2 分頁公式
- 需求:每頁顯示m條,查詢第n頁數(shù)據(jù)
- 公式:
limit (n-1)*m, m - 示例:每頁4條,查第3頁:
limit 8, 4;((3-1)*4=8)
6.3 總頁數(shù)計(jì)算
- 查總記錄數(shù):
count(*)得到總條數(shù)a - 計(jì)算:a/m,結(jié)果為整數(shù)則為總頁數(shù);非整數(shù)則總頁數(shù)=商+1
Day03 - 軟測 Mysql
1. 數(shù)據(jù)準(zhǔn)備
- 需執(zhí)行配套 SQL 腳本,創(chuàng)建并插入
students(學(xué)生)、courses(課程)、scores(成績)、areas(區(qū)域)四張表數(shù)據(jù)。 - 表間關(guān)聯(lián)核心字段:
students.studentNo與scores.studentNo、scores.courseNo與courses.courseNo、areas.pid與areas.id。
2. 連接查詢(多表數(shù)據(jù)聯(lián)動(dòng))
2.1 核心概念
- 用于合并多張表的數(shù)據(jù)集,通過連接條件篩選結(jié)果。
- 內(nèi)連接:只保留兩表滿足連接條件的記錄。
- 左連接:保留左表所有記錄 + 右表匹配記錄,右表無匹配則填
null。 - 右連接:保留右表所有記錄 + 左表匹配記錄,左表無匹配則填
null。
2.2 內(nèi)連接(最常用)
2.2.1 語法(兩種)
select * from 表1 inner join 表2 on 表1.字段=表2.字段;-
select * from 表1, 表2 where 表1.字段=表2.字段;(傳統(tǒng)語法)
2.2.2 關(guān)鍵用法
- 選擇部分字段:指定字段名替代
*,如select 姓名, 成績 from 表1 join 表2 on 條件; - 表別名:簡化語法,如
students as stu,查詢時(shí)用別名引用字段。 - 帶條件查詢:通過
where或and過濾結(jié)果(如指定姓名、成績范圍)。 - 多表連接:連續(xù)
join多張表,依次指定連接條件(如學(xué)生-成績-課程聯(lián)動(dòng))。 - 排序與限制:用
order by排序、limit限制結(jié)果條數(shù)(如查詢成績最高的記錄)。
2.3 左連接
- 語法:
select * from 表1 left join 表2 on 表1.字段=表2.字段; - 適用場景:需保留左表全部數(shù)據(jù)(如查詢所有學(xué)生,包括無成績的學(xué)生)。
2.4 右連接
- 語法:
select * from 表1 right join 表2 on 表1.字段=表2.字段; - 適用場景:需保留右表全部數(shù)據(jù)(如查詢所有課程,包括無成績的課程)。
3. 自關(guān)聯(lián)(單表存儲層級數(shù)據(jù))
3.1 核心場景
- 用于存儲層級關(guān)系數(shù)據(jù)(如省-市-區(qū)縣),無需創(chuàng)建多張表。
- 表結(jié)構(gòu)特征:含
id(唯一標(biāo)識)和pid(父級標(biāo)識),pid關(guān)聯(lián)同表的id。
3.2 關(guān)鍵用法
- 查詢父級數(shù)據(jù):
select count(*) from 表 where pid is null;(如查詢所有省)。 - 查詢子級數(shù)據(jù):通過別名將表視為兩張表,
inner join關(guān)聯(lián)id和pid(如查詢某省的所有城市)。
4. 子查詢(嵌套查詢)
4.1 核心概念
- 一個(gè)
select語句嵌入到另一個(gè)select語句中,嵌入的為子查詢,外層的為主查詢。 - 子查詢可獨(dú)立執(zhí)行,作用是給主查詢提供條件或數(shù)據(jù)源。
4.2 分類與用法
| 類型 | 特征 | 語法示例 |
|---|---|---|
| 標(biāo)量子查詢 | 返回一行一列(單個(gè)值) |
select * from 表 where 字段 > (select avg(字段) from 表);(查詢大于平均值的記錄) |
| 列子查詢 | 返回一列多行 |
select 字段 from 表 where 字段 in (select 字段 from 表 where 條件);(如查詢指定群體的關(guān)聯(lián)數(shù)據(jù)) |
| 表級子查詢 | 返回多行多列(臨時(shí)表) |
select * from (子查詢語句) 別名 join 表 on 條件;(如先篩選女生,再關(guān)聯(lián)成績) |
Day04 - 軟測 Mysql
1. 內(nèi)置函數(shù)(重點(diǎn)掌握)
1.1 字符串函數(shù)
- concat(str1,str2...):拼接多個(gè)字符串,例:
select concat(12,34,'ab'); - length(str):統(tǒng)計(jì)字符個(gè)數(shù),UTF8 漢字占 3 個(gè)長度,例:
select length('我和你'); - 截取函數(shù):left(str,len)(左截?。?、right(str,len)(右截?。?、substring(str,pos,len)(指定位置截取,pos 從 1 開始)
- 去空格函數(shù):ltrim(str)(左去空格)、rtrim(str)(右去空格)、trim(str)(左右去空格)
1.2 數(shù)學(xué)函數(shù)
- round(n,d):四舍五入,n 為原數(shù),d 為保留小數(shù)位(默認(rèn) 0),例:
select round(1.653,2); - rand():生成 0-1.0 的隨機(jī)浮點(diǎn)數(shù),例:隨機(jī)查詢 1 名學(xué)生
select * from students order by rand() limit 1;
1.3 日期時(shí)間函數(shù)
- current_date():返回當(dāng)前日期
- current_time():返回當(dāng)前時(shí)間
- now():返回當(dāng)前日期和時(shí)間
2. 存儲過程(了解核心操作)
2.1 定義
由一條或多條 SQL 語句組成的集合,可重復(fù)調(diào)用。
2.2 核心操作
- 創(chuàng)建:先設(shè)分割符(非 Navicat 環(huán)境)
delimiter //,再執(zhí)行create procedure 存儲過程名(參數(shù)列表) begin SQL語句 end //,最后還原分割符delimiter ; - 調(diào)用:
call 存儲過程名(參數(shù)列表); - 刪除:
drop procedure 存儲過程名;或drop procedure if exists 存儲過程名;
3. 視圖(了解核心操作)
3.1 定義
對查詢語句的封裝,簡化復(fù)雜查詢,便于維護(hù)。
3.2 核心操作
- 創(chuàng)建:
create view 視圖名 as select 語句; - 使用:
select * from 視圖名;(可附加條件查詢) - 刪除:
drop view 視圖名;或drop view if exists 視圖名;
4. 事務(wù)(重點(diǎn)掌握)
4.1 核心概念
不可分割的操作序列,要么全執(zhí)行,要么全不執(zhí)行,保障數(shù)據(jù)一致性(如轉(zhuǎn)賬場景)。
4.2 關(guān)鍵命令
- 開啟事務(wù):
begin;(變更寫入緩存,暫不生效) - 回滾事務(wù):
rollback;(放棄所有修改) - 提交事務(wù):
commit;(將修改寫入實(shí)際表中)
5. 索引(重點(diǎn)掌握)
5.1 核心作用
類似書籍目錄,提升大數(shù)據(jù)量下的查詢效率。
5.2 核心操作
- 創(chuàng)建:
create index 索引名 on 表名(字段名(長度));(字符串字段需指定長度) - 查看:
show index from 表名; - 刪除:
drop index 索引名 on 表名;
5.3 優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):大幅提高 SELECT 查詢速度
- 缺點(diǎn):降低 INSERT、UPDATE、DELETE 操作速度(需同步更新索引)
6. 命令行操作(掌握核心指令)
6.1 連接 MySQL
- 本地連接:
mysql -u 用戶名 -p - 遠(yuǎn)程連接:
mysql -h 主機(jī)IP -u 用戶名 -p - 解決中文亂碼(Windows):連接后執(zhí)行
set names gbk;
6.2 基礎(chǔ)操作
- 選擇數(shù)據(jù)庫:
use 數(shù)據(jù)庫名; - 執(zhí)行 SQL 語句:以分號結(jié)尾,例:
select * from students; - 退出命令行:
exit;
6.3 數(shù)據(jù)庫管理
- 顯示數(shù)據(jù)庫:
show databases; - 創(chuàng)建數(shù)據(jù)庫:
create database 數(shù)據(jù)庫名 default charset 字符集; - 刪除數(shù)據(jù)庫:
drop database 數(shù)據(jù)庫名; - 增刪用戶、修改密碼:通過 grant、revoke、delete 語句實(shí)現(xiàn)(root 權(quán)限)