一、Mac端安裝Mysql
1. 概念
DataBase : 數(shù)據(jù)庫(存儲與管理數(shù)據(jù)的倉庫)
DataBaseManagementSystem : 數(shù)據(jù)庫管理系統(tǒng)(基于不同的管理系統(tǒng)管理數(shù)據(jù)庫會有不同的特點)
SQL:結(jié)構(gòu)化查詢語言(操作關(guān)系型數(shù)據(jù)庫通用的規(guī)范標準)
MySQL數(shù)據(jù)庫是關(guān)系型數(shù)據(jù)庫
關(guān)系型數(shù)據(jù)庫: 是由多張具有關(guān)系的<font color=red>二維表</font>的數(shù)據(jù)庫。
二維表:有行有列的表。
SQL:是一門專門操作關(guān)系型數(shù)據(jù)庫的編程語言。
所有的關(guān)系型數(shù)據(jù)庫都可以基于SQL進行操作
- 可以單行、多行編寫,每一行結(jié)尾必須寫一個;
- 默認不區(qū)分大小寫,建議關(guān)鍵字使用大寫!
- 單行注釋 -- 注釋信息 或者 #注釋信息
- 多行注釋 /* 注釋信息 */
雖然SQL是所有關(guān)系型數(shù)據(jù)庫的操作的規(guī)范標準,但是有一些SQL只能專門用于某個數(shù)據(jù)庫,這種SQL稱之為方言!
MySQL中的SQL語句的分類:
- DDL : 增刪改查數(shù)據(jù)庫,表,字段
- DML : 增刪改數(shù)據(jù)庫表數(shù)據(jù)
- DQL : 查詢數(shù)據(jù)庫的表數(shù)據(jù)
- DCL : 控制數(shù)據(jù)庫的操作用戶(控制權(quán)限)
2. 本地&遠程數(shù)據(jù)庫的兩種方式
mysql -u用戶名 -p密碼 登錄到本機MySQL服務
mysql -u用戶名 -p密碼 -hIP地址 -P端口號 登錄到指定Ip地址的MySQL服務
二、 DDL
1. DDL - 操作數(shù)據(jù)庫
-- 查詢當前DBMS中管理的所有數(shù)據(jù)庫
show databases;
-- 查詢當前默認選中的數(shù)據(jù)庫
select database();
--★選擇指定的數(shù)據(jù)庫操作 (注意:只有選中了某一個數(shù)據(jù)庫才可以針對于該數(shù)據(jù)庫進行操作)
use 數(shù)據(jù)庫名;
-- 創(chuàng)建數(shù)據(jù)庫(IF NOT EXISTS:如果創(chuàng)建數(shù)據(jù)庫,但是數(shù)據(jù)庫存在默認會報錯,加上這句話就不會報錯)
create database [if not exists] 數(shù)據(jù)庫名 [default charset 字符集][collate 排序規(guī)則];
-- 刪除數(shù)據(jù)庫(刪庫跑路) [一般項目初始化可以用(項目上線之后絕對不能用)]
drop database [if not exists] 數(shù)據(jù)庫名;
-- DDL針對于數(shù)據(jù)庫只能選擇/創(chuàng)建/刪除,不能修改!數(shù)據(jù)庫的名稱一旦確定則無法改變!
2. DDL - 操作數(shù)據(jù)表
-- 查詢當前數(shù)據(jù)庫所有表
show tables;
-- 查詢表結(jié)構(gòu)
desc 表名;
-- 查詢指定表的建表語句
show create table 表名;
-- 創(chuàng)建表語法
create table 表名(
字段1 字段1類型 [comment 字段1注釋],
字段2 字段2類型 [comment 字段2注釋],
字段3 字段3類型 [comment 字段3注釋],
......
字段n 字段n類型 [comment 字段n注釋]
) [comment 表注釋];
-- 注意:[...] 為可選參數(shù),最后一個字段后面沒有逗號
約束
概念:字段上的規(guī)則,用于限制存儲的數(shù)據(jù).
種類:
- 非空: not null
- 主鍵: primary key ,一行數(shù)據(jù)的唯一標識.
- 唯一: unique
- 默認: default
- 外健:

數(shù)值類型

字符串

日期時間類型
案例練習:根據(jù)需求創(chuàng)建表(設(shè)計合理的數(shù)據(jù)數(shù)據(jù)類型、長度)
根據(jù)一張員工信息表,要求如下:
- 編號(純數(shù)字)
- 員工工號(字符串類型,長度不超過10位)
- 員工姓名(字符串類型,長度不超過10位)
- 性別(男/女,存儲一個漢字)
- 年齡(正常人年齡,不可能存粗負數(shù))
- 身份證號(二代身份證號均為18位,身份)
- 入職時間(取值年月日即可)
create table emp(
id int comment '編號',
workno varchar(10) comment '工號',
name varchar(10) comment '姓名',
gender char(1) comment '性別 ',
age tinyint unsigned comment '年齡',
idcard char(18) comment '身份證號',
entrydate date comment '入職時間'
) comment '員工表';
【面試題】:char 和 varchar 有什么區(qū)別?
3. DDL - 表操作-修改表
-- 修改字段類型
alter table 表名 modify 字段名 字段類型 ;
-- 添加字段
alter table 表名 add 字段名 類型(長度)[comment 注釋][約束]
-- 案例:
-- 為emp表增加一個新的字段 “昵稱” 為nickname,類型為archer(20)
alter table emp add nickname varchar(20) comment '昵稱';
-- 修改字段名和字段類型
alter table 表名 change 舊字段名 新字段名 類型(長度) [comment 注釋][約束];
-- 案例:
-- 為 emp 表的 nickname 字段修改為 username,類型為varcher(30)
alter table emp change username username varchar(30) comment '昵稱';
-- 刪除字段
alter table 表名 drop 字段名;
alter table 表名 drop column 字段名;
-- 案例:
-- 將emp表的字段username刪除
alter table amp drop username;
-- 修改表名
rename tbale 舊名 to 新名;
alter table 表名 rename to 新表名;
-- 案例:
-- 將emp表的表名修改為 employee
alter table amp rename to employee;
DDL - 表操作 - 刪除表
-- 刪除表
drop table [if exists] 表名;
- 刪除指定表,并重新創(chuàng)建該表
truncate table 表名;
??注意:在刪除表時,表中的全部數(shù)據(jù)也會被刪除。
三、DML
DML(Data Manipulation Lounge 數(shù)據(jù)操作語言),
用來對數(shù)據(jù)庫中的表的數(shù)據(jù)進行增刪改操作.
- 添加數(shù)據(jù) (insert)
- 修改數(shù)據(jù) (update)
- 刪除數(shù)據(jù) (delete)
1. DML - 添加數(shù)據(jù)
-- 1. 給指定字段添加數(shù)據(jù)
insert into 表名(字段1,字段2, ...) values(值1,值2,...);
-- 2. 給全部字段添加數(shù)據(jù)
insert into 表名 values (值1, 值2, ...);
-- 3. 批量添加數(shù)據(jù)
insert into 表名(字段名1, 字段名2, ... ) values(值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
insert into 表名 values(值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
??注意:
- 插入數(shù)據(jù)時,指定的字段順序需要與值的順序一一對應。
- 字符串 和 日期型數(shù)據(jù)應該包含在引號中。
- 插入的數(shù)據(jù)大小,應該在字段的規(guī)定范圍內(nèi)。
-- 案例練習 - 插入單條數(shù)據(jù)
insert into employee (id, workno, workname, gender, age, idcard, entrydate) VALUES
(2, '2', 'matt', '女', '32', '123456789023456789', '2022-01-01');
-- 案例練習 - 插入多條數(shù)據(jù)
insert into employee values
(3, '3', 'matg', '男', '33', '123456789012345671', '2022-4-1'),
(4, '4', 'matg3', '男', '43', '123456789012345672', '2022-4-3'),
(5, '5', 'matg5', '男', '43', '123456789012345673', '2022-4-3');
2. DML - 更新數(shù)據(jù)
-- 更新數(shù)據(jù)
update 表名 set 字段名1 = 值1, 字段名2 = 值2, .... [where 條件];
??注意:修改語句的條件可以有,也可以沒有,如果沒有條件,則會修改整張表的所有數(shù)據(jù)。
-- 案例:
-- 修改id 為1的數(shù)據(jù),將name修改為itheima
-- 修改id 為1的數(shù)據(jù),將name修改為 小昭,gender 修改為 女。
-- 將所有的員工的入職日期修改為 2008-01-01
update employee set workname = 'itheima' where id = 1;
update employee set workname = '小昭', gender = '女' where id = 1;
update employee set entrydate='2008-01-01';
3. DML - 刪除數(shù)據(jù)
-- 刪除數(shù)據(jù)
delete from 表名 [where 條件]
??注意:
- delete 語句的條件可以有,也可以沒有,如果沒有條件,則會刪除整張表的所有數(shù)據(jù)。
- delete語句不能刪除某一個字段的值(可以使用update)。
-- 案例:
-- 刪除gender 為女的員工
-- 刪除所有員工
delete from employee where gender='女';
delete from employee;
四 、 DQL
DQL(Data Query Language 數(shù)據(jù)庫查詢語言),
用來查詢數(shù)據(jù)庫中表的記錄。
查詢關(guān)鍵字:SELECT
DQL- 語法
select
字段列表 ====>>> 聚合查詢(count,max,min,avg,sum)
from
表名列表 ====>>> 基本查詢
where
條件列表 ====>>> 條件查詢(where)
group by
分組字段列表。 ====>>> 分組查詢(group by)
having
分組后條件列表
order by
排序字段列表。 ====>>> 排序查詢(order by)
limit
分頁參數(shù)。 ====>>> 分頁查詢(limit)
>1. DQL - 基本查詢
1. 查詢多個字段
select 字段1,字段2,字段3... from 表名;
select * from 表名;
2. 設(shè)置別名
select 字段1 [as 別名1], 字段2 [as 別名2] ... from 表名;
3. 去除重復記錄
select distinct 字段列表 from 表名;
-- 數(shù)據(jù)準備
-- 數(shù)據(jù)準備
create table emp(
id int comment '編號',
workno varchar(10) comment '工號',
name varchar(10) comment '姓名',
gender char(1) comment '性別',
age tinyint unsigned comment '年齡',
idcard char(18) comment '身份證號',
wordaddress varchar(50) comment '工作地址',
entrydate date comment '入職時間'
) comment '員工表';
insert into emp (id, workno, name, gender, age, idcard, wordaddress, entrydate)
values (1, '1','柳巖','女',20,'123456789012345678','北京','2000-01-01'),
(2, '2','張無忌','男',18,'223456789012345678','北京','2005-09-01'),
(3, '3','韋一笑','男',38,'323456789012345678','上海','2005-08-01'),
(4, '4','趙敏','女',18,'423456789012345678','北京','2009-12-01'),
(5, '5','小昭','女',16,'523456789012345678','上海','2007-07-01'),
(6, '6','楊逍','男',28,'62345678901234567X','北京','2006-01-01'),
(7, '7','范瑤','男',40,'723456789012345678','北京','2005-05-01'),
(8, '8','黛綺絲','女',38,'823456789012345678','天津','2015-05-01'),
(9, '9','范涼涼','女',45,'923456789012345678','北京','2010-04-01'),
(10, '10','陳友瓊','男',53,'133456789012345678','上海','2011-01-01'),
(11, '11','張士誠','男',55,'143456789012345678','江蘇','2015-05-01'),
(12, '12','常遇春','男',32,'153456789012345678','北京','2004-02-01'),
(13, '13','張三豐','男',88,'163456789012345678','江蘇','2020-11-01'),
(14, '14','滅絕','女',65,'173456789012345678','西安','2019-05-01'),
(15, '15','胡青牛','男',70,'18345678901234567X','西安','2018-04-01'),
(16, '16','周芷若','女',18,null,'北京','2000-01-01');
作業(yè):
- 基本查詢
- 查詢指定字段 name, workno, age 返回
- 查詢所有字段返回
- 查詢所有員工的工作地址,起別名
- 查詢公司員工的上班地址(不要重復)
1. select name, workno, age from emp;
2. select id, workno, name, gender, age, idcard, wordaddress, entrydate from emp;
2. select * from emp;
3. select name, wordaddress as '工作地址' from emp;
3. select name, wordaddress '工作地址' from emp;
4. select distinct wordaddress as '工作地址' from emp;
>2. DQL - 條件查詢(where)
1. 語法
select 字段列表 from 表名 where 條件列表
2. 條件
比較運算符

比較運算符

邏輯運算符
作業(yè):
- 查詢年齡等于 88 的員工
- 查詢年齡小于 20 的員工信息
- 查詢年齡小于等于 20 的員工信息
- 查詢沒有身份證號的員工信息
- 查詢有身份證號的員工信息
- 查詢年齡不等于88的員工信息
- 查詢年齡在 15歲(包含)到 20歲(包含)之間的員工信息
- 查詢性別為 女 且年齡小于 25 歲的員工信息
- 查詢年齡等于 18 或20 或40的員工信息
- 查詢姓名為兩個字的員工信息
- 查詢身份證號最后一位是X的員工信息
1. select * from emp where age=88;
2. select * from emp where age < 20;
3. select * from emp where age <= 20;
4. select * from emp where idcard is null;
5. select * from emp where idcard is not null;
6. select * from emp where age != 88;
6. select * from emp where age <> 88;
7. select * from emp where age >= 15 && age <= 20;
7. select * from emp where age >= 15 and age <= 20;
7. select * from emp where age between 15 and 20;
8. select * from emp where age < 25 and gender = '女';
9. select * from emp where age = 18 or age = 20 or age = 40;
9. select * from emp where age in (18,20,40);
10. select * from emp where name like '__';
11. select * from emp where idcard like '_________________X';
11. select * from emp where idcard like '%X';
>3. DQL - 聚合函數(shù)(count, max, min, avg, sum)
1. 介紹
將一列數(shù)據(jù)作為一個整體,進行縱向計算
2. 常見聚合函數(shù)(見圖)
3. 語法
select 聚合函數(shù)(字段列表) from 表名;
??注意:null值不參與所有的聚合函數(shù)運算。

常見聚合函數(shù)
作業(yè):
- 統(tǒng)計該企業(yè)員工數(shù)量
- 統(tǒng)計該企業(yè)員工的平均年齡
- 統(tǒng)計該企業(yè)員工的最大年齡
- 統(tǒng)計該企業(yè)員工的最小年齡
- 統(tǒng)計西安地區(qū)員工的年齡之和
1. select count(*) from emp;
1. select count(idcard) from emp;
2. select avg(age) from emp;
3. select max(age) from emp;
4. select min(age) from emp;
5. select sum(age) from emp where wordaddress = '西安';
>4. 分組查詢(group by)
DQL - 分組查詢
1. 語法
select 字段列表 from 表名 [where 條件] group by 分組字段名 [having 分組后過濾條件];
2. where 與 having 區(qū)別
> 執(zhí)行時機不通: where 是分組之前進行過濾,不滿足where條件,不參與分組;而having 是分組之后對結(jié)果進行過濾。
> 判斷條件不同: where 不能對聚合函數(shù)進行判斷,而having 可以。
??注意:
- 執(zhí)行順序: where > 聚合函數(shù) > having.
- 分組之后,查詢的字段一般為聚合函數(shù)和分組字段,查詢其他字段無任何意義。
作業(yè):(分組查詢)
- 根據(jù)性別分組,統(tǒng)計男性員工 和 女性員工的數(shù)量
- 根據(jù)性別分組,統(tǒng)計男性員工 和 女性員工的平均年齡
- 查詢年齡小于 45 的員工,并根據(jù)工作地址分組,獲取員工數(shù)量大于等于3的工作地址
1. select gender, count(*) from emp group by gender;
2. select gender, avg(age) from emp group by gender;
3. select wordaddress, count(wordaddress) from emp where age < 45 group by wordaddress having count(*) >= 3;
3. select wordaddress, count(wordaddress) address_count from emp where age < 45 group by wordaddress having address_count >= 3;
>4. 排序查詢(group by)
1. 語法
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;
2. 排序方式
> ASC: 生序(默認值)
> DESC:降序
??注意:如果是多字段排序,當?shù)谝粋€字段值相同時,才會根據(jù)第二個字段進行排序。
作業(yè):(排序查詢)
- 根據(jù)年齡對公司的員工進行升序排序
- 根據(jù)入職時間,對員工進行降序排序
- 根據(jù)年齡對公司的員工進行升序排序,年齡相同,再按照入職時間進行降序排序
1. select * from emp order by age;
2. select * from emp order by entrydate desc;
3. select * from emp order by age, entrydate desc ;
>5. 分頁查詢(limit)
DQL - 分頁查詢
1. 語法
select 字段列表 from 表名 limit 起始索引, 查詢記錄數(shù);
注意:
- 其實索引從0開始,起始索引 = (查詢頁碼-1)* 每頁顯示記錄數(shù)。
- 分頁查詢是數(shù)據(jù)庫的方言,不同的數(shù)據(jù)庫有不同的實現(xiàn),MySQL中是limit。
- 如果查詢的是第一頁的數(shù)據(jù),起始索引可以省略,直接簡寫為limit 10.
作業(yè):
- 查詢第1頁員工數(shù)據(jù),每頁展示10條記錄
- 查詢第2頁員工數(shù)據(jù),每頁展示10條記錄
1. select * from emp limit 0,10;
1. select * from emp limit 10;
2. select * from emp limit 10,10;
案例:按照需求完成如下DQL語句編寫
- 查詢年齡為 20,21,22,23歲的女性員工信息。
- 查詢性別為男,并且年齡在 20-40歲(含)以內(nèi)的姓名為三個字的員工。
- 統(tǒng)計員工表中,年齡小于60歲的,男性員工和女性員工的人數(shù)。
- 查詢所有年齡小于等于35歲員工的姓名和年齡,并對查詢結(jié)果按年齡升序排序,如果年齡相同按入職時間降序排序。
- 查詢性別為男,且年齡在20-40歲(含)以內(nèi)的前5個員工信息,對查詢的結(jié)果按年齡升序排序,年齡相同按入職時間升序排序。
1. select * from emp where gender = '女' and age in(20,21,22,23);
2. select * from emp where gender = '男' and ( age between 20 and 40 ) and name like '___';
3. select gender, count(*) from emp where age < 60 group by gender;
4. select name, age from emp where age <= 35 order by age, entrydate desc;
5. select * from emp where gender = '男' and (age between 20 and 40) order by age, entrydate desc limit 5;
DQL - 執(zhí)行順序

DQL執(zhí)行順序
# from ...
# where ...
# select ...
# order by ...
# limit ...
DQL 總結(jié)

DQL總結(jié)