MySQL數(shù)據(jù)庫

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);。
  • 非空約束: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ì)算

  1. 查總記錄數(shù):count(*)得到總條數(shù)a
  2. 計(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.studentNoscores.studentNoscores.courseNocourses.courseNo、areas.pidareas.id

2. 連接查詢(多表數(shù)據(jù)聯(lián)動(dòng))

2.1 核心概念

  • 用于合并多張表的數(shù)據(jù)集,通過連接條件篩選結(jié)果。
  • 內(nèi)連接:只保留兩表滿足連接條件的記錄。
  • 左連接:保留左表所有記錄 + 右表匹配記錄,右表無匹配則填 null。
  • 右連接:保留右表所有記錄 + 左表匹配記錄,左表無匹配則填 null。

2.2 內(nèi)連接(最常用)

2.2.1 語法(兩種)

  1. select * from 表1 inner join 表2 on 表1.字段=表2.字段;
  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í)用別名引用字段。
  • 帶條件查詢:通過 whereand 過濾結(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) idpid(如查詢某省的所有城市)。

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)限)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容