本篇文章給大家?guī)砹岁P(guān)于mysql的相關(guān)知識(shí),其中主要介紹了關(guān)于mysql的一些基本操作,SQL的基本操作一般是指對(duì)數(shù)據(jù)庫,數(shù)據(jù)表,數(shù)據(jù)的增刪改查,下面一起來看一下,希望對(duì)大家有幫助。
程序員必備接口測試調(diào)試工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api設(shè)計(jì)、調(diào)試、文檔、自動(dòng)化測試工具
后端、前端、測試,同時(shí)在線協(xié)作,內(nèi)容實(shí)時(shí)同步
推薦學(xué)習(xí):mysql視頻教程
總的來說,SQL分為四大類,分別是數(shù)據(jù)定義語言DDL,數(shù)據(jù)操作語言DML,數(shù)據(jù)查詢語言DQL和數(shù)據(jù)控制語言DCL。
而SQL的基本操作一般是指對(duì)數(shù)據(jù)庫,數(shù)據(jù)表,數(shù)據(jù)的增刪改查。
1. DDL- 操作數(shù)據(jù)庫
首先要學(xué)習(xí)的是使用DDL來對(duì)數(shù)據(jù)庫進(jìn)行操作,主要是對(duì)數(shù)據(jù)庫的增刪改查操作。
1.1 查詢
查詢所有的數(shù)據(jù)庫:
show databases;
例如:
1.2 創(chuàng)建數(shù)據(jù)庫
創(chuàng)建新的數(shù)據(jù)庫:
create database 數(shù)據(jù)庫名稱;
使用上面的方式創(chuàng)建新的數(shù)據(jù)庫時(shí),如果該數(shù)據(jù)庫已經(jīng)存在,則會(huì)出現(xiàn)錯(cuò)誤,所以我們?cè)趧?chuàng)建新的數(shù)據(jù)庫時(shí)一般會(huì)判斷該數(shù)據(jù)庫是否存在,如果已存在,則不會(huì)創(chuàng)建。
創(chuàng)建新的數(shù)據(jù)庫(判斷數(shù)據(jù)庫是否已經(jīng)存在):
create database if not exists 數(shù)據(jù)庫名稱;
例如:
1.3 刪除數(shù)據(jù)庫
刪除數(shù)據(jù)庫:
drop database 數(shù)據(jù)庫名稱;
和前面創(chuàng)建新的數(shù)據(jù)庫相同,為了避免出現(xiàn)錯(cuò)誤,我們一般會(huì)先判斷該數(shù)據(jù)庫是否存在,如果不存在,則不會(huì)刪除。
刪除數(shù)據(jù)庫(判斷數(shù)據(jù)庫是否已經(jīng)存在):
drop database if exists 數(shù)據(jù)庫名稱;
例如:
1.4 使用數(shù)據(jù)庫
現(xiàn)在我們已經(jīng)成功創(chuàng)建了新的數(shù)據(jù)庫,接下來,我們要在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表,首先我們要明白是對(duì)哪一個(gè)數(shù)據(jù)庫進(jìn)行操作,此時(shí)我們要先學(xué)會(huì)使用數(shù)據(jù)庫,才能對(duì)數(shù)據(jù)庫中的表進(jìn)行操作。
使用數(shù)據(jù)庫:
use 數(shù)據(jù)庫名稱;
查詢當(dāng)前正在使用的數(shù)據(jù)庫:
select database();
例如:
2. DDL- 操作數(shù)據(jù)表
同樣,對(duì)數(shù)據(jù)表的操作無非就是增刪改查,在學(xué)習(xí)相關(guān)操作之前,我們先要熟悉一下MySQL的數(shù)據(jù)類型。
2.1 數(shù)據(jù)類型
MySQL支持多種數(shù)據(jù)類型,但是大致可以分為3中,分別是數(shù)值型,日期型和字符串型。下面是比較常用的幾種數(shù)據(jù)類型:
數(shù)值:
數(shù)據(jù)類型 | 解釋 |
---|---|
tinyint | 小整數(shù)型,占1個(gè)字節(jié) |
int | 大整數(shù)型,占4個(gè)字節(jié) |
double | 浮點(diǎn)類型 |
日期:
數(shù)據(jù)類型 | 解釋 |
---|---|
date | 日期值,只包含年月日 |
datetime | 混合日期和時(shí)間值,包含年月日時(shí)分秒 |
字符串:
數(shù)據(jù)類型 | 解釋 |
---|---|
char | 定長字符串 |
varchar | 變長字符串 |
定長字符串和變長字符串的區(qū)別:
字符串是我們?cè)跀?shù)據(jù)庫中經(jīng)常使用的數(shù)據(jù)類型,使用變長字符串,如果字符的長度沒有達(dá)到指定的長度,那么實(shí)際的長度是多少就占用幾個(gè)字符,這樣的做法顯然是使用時(shí)間換空間,而使用定長字符串雖然有時(shí)會(huì)出現(xiàn)浪費(fèi)空間的情況,但是一般儲(chǔ)存性能比較高。
2.2 查詢表
查詢當(dāng)前數(shù)據(jù)庫下所有的表:
show tables;
查詢表結(jié)構(gòu):
desc 表名稱;
例如:
2.3 創(chuàng)建表
創(chuàng)建一個(gè)新的表:
create table 表名稱( 字段名1 數(shù)據(jù)類型, 字段名2 數(shù)據(jù)類型, ... 字段名n 數(shù)據(jù)類型 #這里是不需要加上,的);
例如:
2.4 刪除表
刪除表:
drop table 表名;
刪除表(判斷表是否存在):
drop table if exists 表名;
例如:
2.5 修改表
修改表名:
alter table 表名 rename to 新的表名;
增加一列:
alter table 表名 add 列名 數(shù)據(jù)類型;
修改數(shù)據(jù)類型:
alter table 表名 modify 列名 新數(shù)據(jù)類型;
修改列名和數(shù)據(jù)類型:
alter table 表名 change 列名 新列名 新數(shù)據(jù)類型;
刪除列:
alter table 表名 drop 列名;
例如:
3. 實(shí)戰(zhàn)案例詳解
需求:設(shè)計(jì)包含如下信息的學(xué)生表,請(qǐng)注重?cái)?shù)據(jù)類型、長度的合理性。
-
編號(hào)
-
姓名,姓名最長不超過10個(gè)漢字
-
性別,因?yàn)槿≈抵挥袃煞N可能,因此最多一個(gè)漢字
-
生日,取值為年月日
-
成績,小數(shù)點(diǎn)后保留兩位
-
地址,最大長度不超過 64
-
學(xué)生狀態(tài)(用數(shù)字表示,正常、休學(xué)、畢業(yè)…)
在完成這樣一個(gè)案例前,首先要?jiǎng)?chuàng)建一個(gè)學(xué)生數(shù)據(jù)庫,在數(shù)據(jù)庫中創(chuàng)建一張新的表,創(chuàng)建表時(shí)注意語法格式,數(shù)據(jù)類型和長度的合理性。
以管理員身份運(yùn)行命令提示符cmd,啟動(dòng)Mysql服務(wù),登錄MySQL:
創(chuàng)建學(xué)生信息數(shù)據(jù)庫:
create database if not exists student;
使用student
數(shù)據(jù)庫:
use student;
創(chuàng)建數(shù)據(jù)表:
create table stu( id int ,-- 編號(hào) name varchar(10),-- 姓名 gender char(1),-- 性別 birthday date,-- 生日 score double(5,2) ,-- 分?jǐn)?shù) addr varchar(50),-- 地址 status tinyint-- 狀態(tài));
現(xiàn)在,我們已經(jīng)學(xué)會(huì)了寫SQL來操作數(shù)據(jù)庫,但是我們?cè)诿钚兄袑慡QL時(shí),往往有體驗(yàn)感差,效率低等問題,今天開始我們就要學(xué)習(xí)在MySQL的圖形化客戶端Navicat中執(zhí)行SQL語句
。
Navicat 為數(shù)據(jù)庫管理、開發(fā)和維護(hù)提供了一款直觀而強(qiáng)大的圖形化界面,大大的提高了工作效率,建議在學(xué)習(xí)中也使用這款開發(fā)工具。接下來,在Navicat中新建數(shù)據(jù)庫,新建查詢,我們就可以編寫SQL并且執(zhí)行SQL語句了。
4. DML- 增刪改數(shù)據(jù)
4.1 添加數(shù)據(jù)
給指定列添加數(shù)據(jù):
insert into 表名(列名1,列名2...) values(值1,值2...);
給全部列添加數(shù)據(jù):
insert into 表名 values(值1,值2...);
批量添加數(shù)據(jù):
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...;
批量添加數(shù)據(jù)(省略字段名):
insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...)...;
在開發(fā)過程中添加數(shù)據(jù)時(shí)是不建議省略字段名的,這樣降低了代碼的可讀性,使效率下降。例如:
查詢表中的所有數(shù)據(jù)的方法是:
select * from 表名;
后面會(huì)用到的。
需求:往下面的tb_user
表中添加一條數(shù)據(jù)。
insert into tb_user(id,name) values(2,'李四');
添加成功:
4.2 修改數(shù)據(jù)
修改表的數(shù)據(jù):
update 表名 set 列名1=值1,列名2=值2...[where 條件];
在修改數(shù)據(jù)時(shí),也可以不使用where條件,此時(shí)的操作是修改整列數(shù)據(jù),這樣的操作是很危險(xiǎn)的。
需求:把下面tb_user
表中的張三的密碼改為abc23
update tb_user set passwor d ='abc123' where name='張三';
修改成功:
4.3 刪除數(shù)據(jù)
刪除表的數(shù)據(jù):
delete from 表名 [where 條件];
在刪除某條數(shù)據(jù)時(shí),如果不使用where條件,將會(huì)導(dǎo)致刪除整個(gè)表的數(shù)據(jù)。
需求:刪除tb_user表中的李四記錄。
delete from tb_user where name='李四';
操作成功:
5. DQL- 數(shù)據(jù)的查詢操作
查詢是數(shù)據(jù)操作至關(guān)重要的一部分,
比如說在所有商品中查找出價(jià)格在規(guī)定范圍內(nèi)的所有商品,要想把數(shù)據(jù)庫中的數(shù)據(jù)在客戶端中展示給用戶,一般都進(jìn)行了查詢的操作。
在實(shí)際開發(fā)中,我們要根據(jù)不同的需求,并且考慮查詢的效率來決定怎樣進(jìn)行查詢,學(xué)習(xí)查詢前,可以先看看查詢的完整語法:
SELECT 字段列表FROM 表名列表WHERE 條件列表GROUP BY 分組字段HAVING 分組后條件ORDER BY 排序字段LIMIT 分頁限定
根據(jù)查詢的完整語法中的關(guān)鍵字,我們分別來學(xué)習(xí)基礎(chǔ)查詢,條件查詢,排序查詢,分組查詢和分頁查詢。
下面的練習(xí)中使用以下的案例學(xué)習(xí)單表查詢:
-- 刪除stu表drop table if exists stu;-- 創(chuàng)建stu表CREATE TABLE stu (id int, -- 編號(hào)name varchar(10), -- 姓名age int, -- 年齡gender varchar(5), -- 性別math double(5,2), -- 數(shù)學(xué)成績english double(5,2) -- 英語成績);-- 添加數(shù)據(jù)INSERT INTO stu(id,name,age,gender,math,english)VALUES(1,'小張',23,'男',66,78),(2,'小李',20,'女',98,87),(3,'小陳',55,'男',56,77),(4,'小樊',20,'女',76,65),(5,'小馬',20,'男',86,NULL),(6,'小趙',57,'男',99,99);
在Navicat中選中SQL并執(zhí)行:
5.1 基礎(chǔ)查詢
1.1 基礎(chǔ)查詢語法
查詢多個(gè)字段:
select 字段列表 from 表名;
查詢?nèi)孔侄危?/p>
select * from 表名;
去除重復(fù)記錄:
select distinct 字段列表 from 表名;
起別名操作:
select 字段名 別名 from 表名;
1.2 基礎(chǔ)查詢練習(xí)
使用學(xué)生表進(jìn)行基礎(chǔ)查詢練習(xí):
查詢多個(gè)字段的練習(xí):
select name,math from stu;
起別名操作練習(xí):
select name,english 英語成績 from stu;
5.2 條件查詢
2.1 條件查詢語法
一般語法:
select 字段列表 from 表名 where 條件列表;
條件查詢一般配合運(yùn)行符進(jìn)行,下面是常見的幾個(gè)運(yùn)算符:
運(yùn)算符 | 功能描述 |
---|---|
> < = ! | 大于 小于 等于 不等于 |
between…and… | 在這個(gè)范圍之內(nèi) |
in(…) | 多選一 |
is null / is not null | 是null / 不是null |
and 或 && | 并且 |
or 或 || | 或者 |
2.2 條件查詢練習(xí)
使用學(xué)生表進(jìn)行條件查詢練習(xí):
查詢年齡大于20的學(xué)生信息:
select * from stu where age>20;
查詢年齡等于18歲 或者 年齡等于20歲 或者 年齡等于21歲的學(xué)生信息:
select * from stu where age in(18,20,21);
模糊查詢使用like關(guān)鍵字,可以使用通配符進(jìn)行占位:
- _ : 代表單個(gè)任意字符
- % : 代表任意個(gè)數(shù)字符
查詢姓名中含有張的學(xué)生信息:
select * from stu where name like '%張%';
5.3 排序查詢
3.1 排序查詢語法
select 字段列表 from 表名 order by 排序字段名1 [排序方式]...;
注:排序方式有兩種:分別是升序ASC和降序DESC,默認(rèn)情況下是升序ASC。
3.2 排序查詢練習(xí)
使用學(xué)生表進(jìn)行排序查詢練習(xí):
查詢學(xué)生信息,按照數(shù)學(xué)成績降序排列:
select * from stu order by math DESC;
5.4 聚合函數(shù)
4.1 聚合函數(shù)語法
什么是聚合函數(shù)呢?在進(jìn)行查詢操作時(shí),往往需要對(duì)一整列進(jìn)行運(yùn)算,例如可以計(jì)算一整列成績數(shù)據(jù)的平均值,我們就要使用聚合函數(shù)。下面是常見的聚合函數(shù):
函數(shù)名 | 功能 |
---|---|
count(列名) | 統(tǒng)計(jì)數(shù)量(一般選用不為null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
一般語法:
select 聚合函數(shù) from 表名;
注:NULL值不參與聚合函數(shù)運(yùn)算。
4.2 聚合函數(shù)練習(xí)
使用學(xué)生表進(jìn)行聚合函數(shù)的練習(xí):
統(tǒng)計(jì)該表中一共有幾個(gè)學(xué)生:
select count(id) from stu;
上面我們使用某一字段進(jìn)行運(yùn)算,這樣做可能面臨的問題是某一個(gè)值可能是NULL,所以我們一般使用 *
進(jìn)行運(yùn)算,因?yàn)橐恍兄胁豢赡芩械淖侄味际荖ULL。
select count(*) from stu;
查詢數(shù)學(xué)成績的平均分:
select avg(math) from stu;
5.5 分組查詢
5.1 分組查詢語法
select 字段列表 from 表名 [where 分組前的條件限定] group by 分組字段名 [having 分組后的條件過濾]
注:分組之后,查詢的字段為聚合函數(shù)和分組字段,查詢其他字段無任何意義。
5.2 分組查詢練習(xí)
使用學(xué)生表進(jìn)行分組查詢練習(xí):
查詢男同學(xué)和女同學(xué)各自的數(shù)學(xué)平均分,以及各自人數(shù),要求:分?jǐn)?shù)低于70分的不參與分組:
select gender, avg(math),count(*) from stu where math > 70 group by gender;
查詢男同學(xué)和女同學(xué)各自的數(shù)學(xué)平均分,以及各自人數(shù),要求:分?jǐn)?shù)低于70分的不參與分組,分組之后人數(shù)大于2個(gè)的:
select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;
注:where 和 having
執(zhí)行時(shí)機(jī)不一樣:where 是分組之前進(jìn)行限定,不滿足where條件,則不參與分組,而having是分組之后對(duì)結(jié)果進(jìn)行過濾。所以,where 不能對(duì)聚合函數(shù)進(jìn)行判斷,having 可以。
5.6 分頁查詢
6.1 分頁查詢語法
在我們的印象中,網(wǎng)頁在展示大量的數(shù)據(jù)時(shí),往往不是把數(shù)據(jù)一下全部展示出來,而是用分頁展示的形式,其實(shí)就是對(duì)數(shù)據(jù)進(jìn)行分頁查詢的操作,即每次只查詢一頁的數(shù)據(jù)展示到頁面上。
select 字段列表 from 表名 limit 查詢起始索引,查詢條目數(shù);
在 limit
關(guān)鍵字中,查詢起始索引這個(gè)參數(shù)是從0開始的。
6.2 分頁查詢練習(xí)
使用學(xué)生表進(jìn)行分頁查詢練習(xí):
從0開始查詢,查詢3條數(shù)據(jù):
select * from stu limit 0,3;
起始索引 = (當(dāng)前頁碼 - 1) * 每頁顯示的條數(shù)
推薦學(xué)習(xí):mysql視頻教程