我親愛的對手,亦敵亦友,但我同樣希望你能成功,與我一起,站在人生的山頂上
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——24.3.1
一、DDL 數據定義語言
1.DDL —— 數據庫操作
查詢
? ? ? ? 查詢所有數據庫
show databases;
? ? ? ? 查詢當前數據庫
select database();
創建
create database [if not exists] 數據庫名 [default charset?字符集] [collate 排序規則];
刪除
drop database [if exists] 數據庫名;
使用
use 數據庫名;
2.DDL —— 表操作?—— 查詢
前提是進入一個數據庫
use 數據庫名;
查詢當前數據庫所有表
show tables;
查詢表結構
desc 表名;
查詢指定表的建表語句
show create table 表名;
3.DDL —— 表操作 —— 創建?
create table 表名(字段1 字段1類型 [comment 字段1的注釋],字段2 字段2類型 [comment 字段2的注釋],字段3 字段3類型 [comment 字段3的注釋],…… ……字段n 字段n類型 [comment 字段n的注釋] )[comment 表的注釋];
注意:[……]為可選參數,最后一個字段后面沒有逗號
例:
4.DDL —— 表操作 —— 數據類型
MySQL中的數據類型有很多,主要分為三類:數值類型、字符串類型、日期時間類型
數值類型
字符串類型
char性能好,varchar性能較差
日期時間類型
5.DDL —— 表操作 —— 修改
添加字段
alter table 表名 add 字段名 類型(長度) [comment 注釋][約束];
修改數據類型?
alter table 表名 modify 字段名 新數據類型(長度);
修改字段名和字段類型
alter table 表名 change 舊字段名 新字段名 類型(長度) [comment 注釋] [約束];
刪除字段
alter table 表名 drop 字段名;
修改表名
alter table 表名 rename to 新表名;
6.DDL —— 表操作 —— 刪除?
刪除表
drop table [if exists] 表名;
刪除指定表,并重新創建該表
truncate table 表名;
?7.DDL 數據定義語言 總結
二、DML?數據操縱語言
DML語言是數據操作語言,用來對數據庫中表的數據記錄進行增刪改操作
添加數據(insert)
修改數據(update)
刪除數據(delete)
1.DML —— 添加數據
1.給指定字段添加數據
insert into 表名 (字段名1,字段名2,……) values (值1,值2,……);
2.給全部字段添加數據,值與字段相對應起來
insert into 表名 values (值1,值2,……);
3.批量添加數據
insert into 表名 (字段名1,字段名2,……) values (值1,值2,……),(值1,值2,……),(值1,值2,……);insert into 表名 values (值1,值2,……),(值1,值2,……),(值1,值2,……);
注意:
? ? ? ? 插入數據時,指定的字段順序需要與值的順序一一對應
? ? ? ? 字符串和日期型數據應該包含在引號中
? ? ? ? 插入的數據大小,應該在字段的規定范圍之內
2.DML —— 修改數據
update 表名 set 字段名 = 值1,字段名2 = 值2,… [where 條件];
注意:修改語句的條件可以有,也可以沒有,如果沒有條件,則會修改整張表的所有數據
3.DML —— 刪除數據
delete from 表名 [where 條件]
注意:
? ? ? ? delete語句的條件可以有,也可以沒有,如果沒有條件,則會刪除整張表的所有數據
? ? ? ? delete語句不能刪除某一字段的值(可以使用update修改字符值為null)
4.DML 數據操縱語言 總結
?三、DQL 數據查詢語言
1.DQL ——?語法
?2.DQL —— 基本查詢
1.查詢多個字段
select 字段1,字段2,字段3… from 表名; select * from 表名;
2.設置別名
select 字段1 [as 別名1],字段2[as 別名2] … from 表名;
as 可省略
3.去除重復記錄
select distinct 字段列表 from 表名;
3.DQL —— 條件查詢(where)
select 字段列表 from 表名 where 條件列表;
?4.條件查詢中的條件
between后跟最小值,and后跟最大值
可以用in(選項)來替代or關鍵字
下劃線匹配單個字符,%匹配任意數量字符
4.DQL —— 聚合函數(count、max、min、avg、sum)
1.介紹
? ? ? ? 將一列數據作為一個整體,進行縱向計算
2.常見聚合函數
? ? ? ? count? ? ? ? ? ? ? ? 統計數量
? ? ? ? max? ? ? ? ? ? ? ? ? 最大值
? ? ? ? min? ? ? ? ? ? ? ? ? ?最小值
? ? ? ? avg? ? ? ? ? ? ? ? ? ?平均值
? ? ? ? sum? ? ? ? ? ? ? ? ? 求和
聚合函數作用于某一列數據
3.語法
select 聚合函數(字段列表) from 表名;
注意:null值不參與所有聚合函數的運算
4.案例
5.DQL —— 分組查詢(group by)
1.語法
select 字段列表 from 表名 [where 條件] group by 分組字段名 [having 分組后過濾條件];
2.where 與 having的區別
? ? ? ? 執行時機不同:where是分組之前進行過濾,不滿足where條件,不參與分組;而having是分組之后對結果進行過濾
? ? ? ? 判斷條件不同:where不能對聚合函數進行判斷,而having可以
3.案例
在分組查詢后一般查詢展示的字段是分組之后的字段和聚合函數
?6.DQL —— 排序查詢(order by)
1.語法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
2.排序方式
????????asc:升序(默認值)
? ? ? ? desc:降序
注意:如果是多字段排序,當第一個字段值相同時,才會根據第二個字段進行排序
3.案例
7.DQL —— 分頁查詢(limit)
1.語法
select 字段列表 from 表名 limit 起始索引,查詢記錄數;
注意:
? ? ? ? 起始索引從0開始,起始索引 = (查詢頁碼 - 1)* 每頁顯示記錄數
? ? ? ? 分頁查詢是數據庫的方言,不同數據庫有不同的實現,mysql中是limit
? ? ? ? 如果查詢的是第一頁數據,起始索引可以省略,直接簡寫為limit 10
2.案例
8.DQL —— 案例?
1.耷詢年齡為20,21,22,23歲的女性員工信息。
select * from emp where age in(20,21,22,23) and gender = '女';
2.查詢性別為 男,并且年齡在 20-40 歲(含)以內的姓名為三個字的員工。
select * from emp where age between 20 and 40 and gender = '男' and name like '___';
3.統計員工表中,年齡小于60歲的 ,男性員工和女性員工的人數。
select gender,count(*)?from emp where age < 60 group by gender;
4.查詢所有年齡小于等于35歲員工的姓名和年齡,并對査詢結果按年齡升序排序,如果年齡相同按入職時間降序排序。
select name,age from emp where age <= 35 order by age asc,entrydate desc;
5.查詢性別為男,且年齡在20-40 歲(含)以內的前5個員工信息,對査詢的結果按年齡升序排序,年齡相同按入職時間升序排序。
select * from emp where gender = '男' and age between 20 and 40 order by age asc,entrydate asc limit 5;
9.DQL —— 執行順序?
10.DQL —— 總結
四、DCL 數據控制語言
管理數據庫用戶
控制用戶對數據庫的訪問權限
1.DCL —— 管理用戶
1.查詢用戶
use mysql;select * from user;
2.創建用戶
create user '用戶名' @ '主機名' identified by ’密碼‘;
3.修改用戶密碼
alter user '用戶名' @ '主機名' identified with mysql_native_password by '新密碼';
4.刪除用戶
drop user '用戶名' @ '主機名';
?注意:
? ? ? ? 主機名可以用%通配
? ? ? ? 這類SQL開發人員操作較少,主要是由DBA(數據庫管理員)使用
2.DCL —— 權限控制
1.權限列表
2.查詢權限
show grants for '用戶名'@'主機名';
3.授予權限
grant 權限列表 on 數據庫名.表名 to '用戶名'@'主機名';
4.撤銷權限
remoke 權限列表 on 數據庫名.表名 from '用戶名'@'主機名';
5.案例
注意:
? ? ? ? 多個權限之間,使用逗號分割
? ? ? ? 授權時,數據庫名和表名可以使用* 進行通配,代表所有