MySQL_基礎(chǔ)+高級篇- 數(shù)據(jù)庫 -sql -mysql教程_mysql視頻_

有bug。視頻標(biāo)識有時(shí)是不對應(yīng)的。

MySQL數(shù)據(jù)庫管理軟件(開源)

重要性

內(nèi)存 - 易失性

文件 - 大量、不易查詢
=>DB管理系統(tǒng) - 軟件

數(shù)據(jù)庫管理系統(tǒng) 安裝

DB(數(shù)據(jù)庫database):
存儲(chǔ)數(shù)據(jù)的“倉庫”。它保存了一系列有組織的數(shù)據(jù)。
DBMS(數(shù)據(jù)庫管理系統(tǒng)Database Management System):
數(shù)據(jù)庫是通過DBMS創(chuàng)建和操作的容器。
SQL(結(jié)構(gòu)化查詢語言Structure Language):
專門用來與數(shù)據(jù)庫通信的語言。
管理系統(tǒng)聽得懂的語言

DBA管理數(shù)據(jù)庫的員工

總結(jié)
數(shù)據(jù)庫的好處
1 持久化數(shù)據(jù)到本地
2 可以實(shí)現(xiàn)結(jié)構(gòu)化查詢,方便管理
數(shù)據(jù)庫相關(guān)概念
DB:數(shù)據(jù)庫,保存一組有組織的數(shù)據(jù)的容器
DBMS:數(shù)據(jù)庫管理系統(tǒng),又稱為數(shù)據(jù)庫軟件(產(chǎn)品),用于管理DB中的數(shù)據(jù)
SQL:結(jié)構(gòu)化查詢語言,用于和DBMS通信的語言
如何存儲(chǔ)數(shù)據(jù)?


一般的安裝 是 安裝數(shù)據(jù)庫的服務(wù)端



刪除殘留文件


清理注冊表


開發(fā)機(jī)占的內(nèi)存小


Data - 文件目錄
配置完成后
服務(wù)需要重新啟動(dòng)
開機(jī)自啟 -> 手動(dòng)


簡寫


如何輸入SQL命令的
show database;

MySQL自帶的四個(gè)數(shù)據(jù)庫
information_schema用于 保存 源數(shù)據(jù)信息
performance_schema用于 搜集 性能信息
test代表一種測試數(shù)據(jù)庫
use
show

select

create

desc

看數(shù)據(jù)select * from DB

insert

update

delete

查看當(dāng)前數(shù)據(jù)庫的版本
select version();
mysql --version
mysql -V


軟件 會(huì) 自動(dòng)規(guī)劃

通過 root用戶 連接到 本機(jī)


每行命令 加 分號

DQL查詢
DML增刪改
DDL庫和表的定義
TCL事務(wù)控制語言

合法的 可以直接執(zhí)行的


字段



在做查詢之前 use DB;



特殊情況




連接




要查誰,就加誰
怎么判斷?“的”后面的

員工信息 *



使用轉(zhuǎn)義符 \

指定轉(zhuǎn)義符 ESCAPE




③不支持通配符

有可能出現(xiàn)的值 都放在()里

等價(jià)關(guān)系



IS要和NULL搭配

判斷NULL值

判斷普通值

缺點(diǎn)
可讀性差
區(qū)分




and 可能不一樣
or 一樣

使用like %%無法查出 NULL 的記錄
正確處理的方式是 拼接SQL
拼接 sql 需要先定義 初始化sql where “1=1”
拼接:where += ......;














排序


DESC 降序
ASC 升序 默認(rèn)


可以按照 別名 進(jìn)行排序

整體
局部 降序





常見函數(shù) - 類似Java的方法


單行函數(shù) 可分為

length 用于 獲取數(shù)值的字節(jié)個(gè)數(shù)
utf
一個(gè)字母一個(gè)字節(jié)
一個(gè)漢字三個(gè)字節(jié)
jdk
一個(gè)漢字兩個(gè)字節(jié)

concat 拼接字符串

upper、lower 大小寫

substr、substring 索引


instr 返回起始索引

trim 去前后空格

lpad、rpad


replace

round
四舍五入
加絕對值,再加正負(fù)號

ceil
向上取整
floor
向下取整

truncate
截?cái)?/p>

?mod
取余











?case




不是=
而是<、>的情況





分組函數(shù) - 統(tǒng)計(jì)使用


搭配使用
如:round 保留小數(shù)






效率
一般使用 count(*);
統(tǒng)計(jì)行數(shù)




分組查詢








篩選

案例3



group by可以放什么




各個(gè)、每個(gè)

連接查詢


笛卡爾積

連接條件

表名限定


案例1 - 等值連接
第一張表 匹配 第二張表
篩選

案例2
篩選


起別名
兩個(gè)表的順序是否可變? - 可以

4 是否可以加篩選
WHERE
AND
案例1

案例2

5 是否可以加分組
案例1


因?yàn)閮蓚€(gè)表里都有departmentID 所以要區(qū)分一下

6 可以加排序? √
案例

7 三表連接? √

總結(jié)

非等值連接

自連接(找自己) = 等值連接

把 原來的表 當(dāng)成 兩張,甚至 更多的表



排序查詢

常見函數(shù)
字符函數(shù)

數(shù)字函數(shù)

日期函數(shù)

其他函數(shù)

流程控制函數(shù)

多重 if 實(shí)現(xiàn)區(qū)間判斷

分組函數(shù)
分類

特點(diǎn)


統(tǒng)計(jì) 案例

count(1):統(tǒng)計(jì)是1的行數(shù)

分組查詢

特點(diǎn)

連接查詢


等值連接


非等值連接

自連接 - 表1、表2 都是一張表







SQL99


表 交換位置 查詢結(jié)果一樣





兩個(gè)表的關(guān)聯(lián)列 類型 最好一樣,或者可以隱形的轉(zhuǎn)換

分組 + 篩選

排序


三表連接

有順序:有連接條件





外連接





左外連接



全外 是 三部分組成


cross join

?







子查詢



案例1

案例2


一個(gè)查詢里可以放兩個(gè)子查詢

案例3 - 分組函數(shù)


案例4 - HAVING

子查詢


篩選


any任意一個(gè)
all所有
列子查詢 - 單列多行
IN

or
= any,即 等于里面任意一個(gè)

案例二


or
小于最大的

案例三

or
小于最小的

行子查詢 結(jié)果集是 一行多列 或 多行多列
案例一:不一定存在

兩個(gè)判斷條件都是用的 =

or使用行子查詢
虛擬字段,多個(gè)字段當(dāng)成一個(gè)使用

個(gè)數(shù)的值 應(yīng)該對應(yīng) 部門號


案例2

將 子查詢的結(jié)果集 充當(dāng) 數(shù)據(jù)源 來使用
且必須 起別名 不然找不到

相關(guān)子查詢









多行的時(shí)候使用IN


類似自連接
不知道單行還是多行 使用IN

CONCAT(將多個(gè)字符串連接成一個(gè)字符串)

?分頁查詢
一頁顯示不全,需要分頁提交sql請求
limit分頁遞交請求
1-10、11-20...頁

【】里的不一定有
【offset】:起始索引
size:要顯示的條目個(gè)數(shù)
執(zhí)行步驟:
每一步都會(huì)生成一個(gè)虛擬的結(jié)果集

特點(diǎn)

案例



在1的結(jié)果上篩選使用having



內(nèi)連接語法

內(nèi)連接特點(diǎn)

分類

外連接

特點(diǎn)

交叉連接

子查詢(邏輯上偏難)


exists
有值返回true,沒值返回false


案例 - 標(biāo)量子查詢

案例 - 列子查詢

分頁查詢







方式二
②處沒有使用子查詢
升序 limit 1 = 最低

平均**最高的##的查詢
思路:
先查每個(gè)##的信息
再將其作為一個(gè)表,進(jìn)行查詢其中最高的








查詢的是領(lǐng)導(dǎo)信息






聯(lián)合查詢 union
將多條查詢語句的結(jié)果合并成一個(gè)結(jié)果
拆分
目錄

沒有分號


應(yīng)用場景:
當(dāng) 要查詢的結(jié)果來自多個(gè)表
且 表之間沒有聯(lián)系
但 查詢的信息一樣 的時(shí)候
特點(diǎn)
1.要求多條查詢語句的查詢列數(shù)是一致的
2.要求多條查詢語句的查詢的每一列的類型和順序最好一致
3.union關(guān)鍵字默認(rèn)去重,
如果使用union all可以包含重復(fù)項(xiàng)
查”每張表“需要的信息


===========================
DML - 數(shù)據(jù)操作語言
插入:insert
修改:update
刪除:delete
-----------------
插入語句
語法:
表已經(jīng)存在了 - 表名
插入到哪一列 - 列名
insert into 表名(列名,...)
value();
特點(diǎn)
方式一:
1.類型一致

2.不可以為null的列必須插入值
可以為null的列如何插入值?
如果不想插入:
方式一:插入null
方式二:列名和值都不寫

3.列的順序是否可以調(diào)換? √

4.列數(shù)和值的個(gè)數(shù)必須一致
bug:列和值不匹配

5.可以省略列名,默認(rèn)所有列,
而且列的順序和表中列的順序一致

方式二:
語法:
insert into 表明
set 列名 = 值,列名 = 值,...

方式一 VS 方式二
1
方式一 支持插入多行。使用逗號分隔
是一條語句,批量插入三行
方式二 不支持插入多行

2.
方式一 支持子查詢
方式二 不支持


將select的結(jié)果集對應(yīng)的插入到表里
--------
修改
1.修改單表記錄?
語法
① update 表名
③ set 列= 新值,列= 新值,...
② where 篩選條件;

2.修改多表的記錄【補(bǔ)充】
sql92語法
update 表1 別名,表2 別名
set 列= 值,...
where 連接條件
and 篩選條件;
sql99語法
update 表1 別名
inner / left / right join 表2 別名
on 連接條件
set 列 = 值
where 篩選條件
sql92,sql99里的列都是對應(yīng)的多表


------
刪除
方式一:delete
語法
- 單表的刪除?
delete from 表名 where 篩選條件

2.多表的刪除【補(bǔ)充】
連接
sql92語法
delete 表1的別名,表2的別名
from 表1 別名,表2 別名
where 連接條件
and 篩選條件;
sql99語法
delete 表1的別名,表2的別名
from 表1 別名
inner / left / right join 表2 別名
on 連接條件
where 篩選條件;

兩個(gè)表都刪的 - 級聯(lián)刪除

方式二:truncate - 清空
語法:
truncate table 表名;
不允許加where
什么時(shí)候使用?
當(dāng)要 刪除表中所有數(shù)據(jù) 的時(shí)候使用

??truncate VS delete
1
delete可以加where條件
truncate不能加
2
truncate刪除,效率高
3
如果要?jiǎng)h除的表中有自增長列
若 用delete刪除后,再插入數(shù)據(jù),自增長列的值 從斷點(diǎn)開始

而 truncate刪除后,再插入數(shù)據(jù),自增長列的值 從1開始

4
truncate刪除沒有返回值

delete刪除有返回值

5
truncate刪除不能回滾
delete刪除可以回滾

1、2

3

方式一:value

方式二:union
insert支持子查詢的情況
select可被認(rèn)為是一條查詢語句 - 因?yàn)楸籾nion合并了

4


5

6

7


8

9

10

==========================
DDL - 數(shù)據(jù)定義語言
庫和表的管理
一、庫的管理
創(chuàng)建、修改、刪除
二、表的管理
創(chuàng)建、修改、刪除
創(chuàng)建:create
修改:alter
刪除:drop
一、庫的管理
1 庫的創(chuàng)建
語法
create database 庫名;

默認(rèn)存儲(chǔ)在

2 庫的修改

不安全 數(shù)據(jù)會(huì)丟失 - 不再使用
若要修改:
停止服務(wù),修改名稱,重新啟動(dòng)

更改庫的字符集

3 庫的刪除

二、表的管理
?1 表的創(chuàng)建
語法
create table 表明{
列名 列的類型【(長度) 約束】,
列名 列的類型【(長度) 約束】,
列名 列的類型【(長度) 約束】,
...
列名 列的類型【(長度) 約束】
}


2 表的修改
核心語法
ALTER TABLE book CHANGE / MODIFY / ADD / DROP COLUMN 列明 【列類型 約束】;
① 修改列名 CHANGE COLUMN

② 修改列的類型或約束 MODIFY COLUMN

③ 添加列 ADD COLUMN

④ 刪除列 DROP COLUMN

⑤ 修改表名 RENAME COLUMN

3 表的刪除

通用的寫法:
DROP DATABASE IF EXISTS 舊庫名;
CREATE DATABASE 新庫名;
--------------------------------------------------
DROP TABLE IF EXISTS 舊表名;
CREATE TABLE 表名();
4 表的復(fù)制

① 僅僅復(fù)制表的結(jié)構(gòu)
- LIKE

② 復(fù)制表的結(jié)構(gòu) + 數(shù)據(jù)
- SELECY * FROM 表名

只復(fù)制部分?jǐn)?shù)據(jù)

僅僅復(fù)制某些字段
0:false
1:true




跨庫 儲(chǔ)存表結(jié)構(gòu)




修改類型







==========
數(shù)據(jù)類型
常見的數(shù)據(jù)類型 - 對數(shù)據(jù)的限制
