MYSQL

作者:燁竹

數(shù)據(jù)庫(kù)的基本操作

登陸MySQL數(shù)據(jù)庫(kù)服務(wù):mysql -h服務(wù)器地址 -P端口號(hào) -u用戶名 -p密碼
mysql -hlocalhost -P3306 -uroot -p
查看數(shù)據(jù)庫(kù):show databases;
創(chuàng)建數(shù)據(jù)庫(kù) :create database 數(shù)據(jù)庫(kù)名 【庫(kù)選項(xiàng)】
【庫(kù)選項(xiàng)】:charset 用于設(shè)置字符集;collate 用于設(shè)置校驗(yàn)集
create database php charset utf8;
查看數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句:show create database 數(shù)據(jù)庫(kù)名;
刪除數(shù)據(jù)庫(kù):drop database 數(shù)據(jù)庫(kù)名
選擇數(shù)據(jù)庫(kù):use 數(shù)據(jù)庫(kù)名;

數(shù)據(jù)表的基本操作

設(shè)置客戶端的通訊編碼:set names 客戶端編碼
查看數(shù)據(jù)表:show tables;
創(chuàng)建數(shù)據(jù)表
語(yǔ)法:
create table 表名(
字段1 列類型 【列屬性】,
字段2 列類型 【列屬性】,
……
)【表選項(xiàng)】
說明:
列類型 列所要存儲(chǔ)的數(shù)據(jù)的類型
【表選項(xiàng)】 包含以下幾項(xiàng):
charset 存儲(chǔ)字符集
collate 校驗(yàn)集
engine 設(shè)置存儲(chǔ)引擎(MyIsam、innodb) 在高版本的MySQL中默認(rèn)是InnoDB
當(dāng)創(chuàng)建一個(gè)表時(shí),那么就是在創(chuàng)建一個(gè)表的結(jié)構(gòu),也就是表的表頭信息。



查看表結(jié)構(gòu):desc 表名
查看表的創(chuàng)建語(yǔ)句:show create table 表名\G;
刪除表:drop table 數(shù)據(jù)表名;

數(shù)據(jù)的操作

數(shù)據(jù)庫(kù)是用于數(shù)據(jù)的操作,操作包含CURD(增Create、改Update、查Review、刪Delete)

增加數(shù)據(jù):insert into 表名【(字段列表)】 values(值列表);

查看數(shù)據(jù):select 【all|distinct】 |字段列表|字段名 【as】 字段別名 from 數(shù)據(jù)源【where子句】【group by子句】【having子句】【order by子句】【limit子句】


【all|distinct】:all (缺省)顯示查詢到的所的記錄;distinct去重(去掉重復(fù))


【where子句】作用:根據(jù)where子句中的表達(dá)式,在將數(shù)據(jù)從硬盤讀取到內(nèi)存時(shí)進(jìn)行第1次篩選。


【group by子句】
group by 字段1,字段2….
作用:根據(jù)where子句得到結(jié)果,對(duì)記錄按指定的字段進(jìn)行分組統(tǒng)計(jì)


統(tǒng)計(jì)函數(shù)
count(
|字段名):
字段名 按字段的的值統(tǒng)計(jì)每一組的記錄個(gè)數(shù)(不會(huì)對(duì)字段名中包含null的記錄進(jìn)行統(tǒng)計(jì))
max(字段名):統(tǒng)計(jì)指定字段的最大值
min(字段名):統(tǒng)計(jì)指定字段的最小值
sum(字段名):取指定字段值的和
avg(字段名):統(tǒng)計(jì)每個(gè)字段的平均值
多字段分組
group by 字段1,字段2…
提示:
先按第個(gè)字段劃分大組,再在每個(gè)大組中,按第2個(gè)字段劃分小組,而統(tǒng)計(jì)函數(shù)得到的結(jié)果是對(duì)最小組進(jìn)行的統(tǒng)計(jì)
回溯統(tǒng)計(jì):with rollup


【having 子句】
對(duì)group by得到的統(tǒng)計(jì)結(jié)果再進(jìn)行第2次篩選。
提示:where表達(dá)式中,不能出現(xiàn)統(tǒng)計(jì)函數(shù)

【order by子句】
對(duì)最終的結(jié)果進(jìn)行顯示順序上的控制。
語(yǔ)法:order by 字段1 【asc|desc】, 字段2 【asc|desc】,
說明:asc 缺省,升序
desc 降序

【limit 子句】:limit 【offfset,】rows
說明:offset 表示的是偏移量,第1條記錄偏移量就0,第2條記錄偏移量就是1,依此類推,如果省略表示offset為0
rows 表示的記錄的條數(shù)。
對(duì)最終的結(jié)果進(jìn)行顯示行數(shù)上的控制。
數(shù)據(jù)的分頁(yè):
與分頁(yè)相關(guān)的因素:
每一頁(yè)的記錄數(shù) rowsPerPage 人為規(guī)定的
當(dāng)前頁(yè) curPage 用戶點(diǎn)擊的頁(yè)碼是幾,當(dāng)前頁(yè)就是幾
業(yè)務(wù)場(chǎng)景:商品表goods 每一頁(yè)的記錄數(shù)是3條(rowsPerPage=3) 用戶可以點(diǎn)擊1,2,3,4,5….
數(shù)據(jù)分頁(yè)的通用的公式:
limit (curPage-1)*rowsperPage,rowsPerPage

聯(lián)合查詢
語(yǔ)法:
(select 語(yǔ)句A)
union 【all|distinct】
(select 語(yǔ)句B)
說明:將A語(yǔ)句得到的結(jié)果與B語(yǔ)句得到的結(jié)果放在一個(gè)表中顯示;兩條select語(yǔ)句得到字段數(shù)要一致
聯(lián)合查詢的作用主要有兩方面:
1、對(duì)同一個(gè)表的不同部分進(jìn)行不同的查詢方式
2、分表存儲(chǔ)數(shù)據(jù)聯(lián)合查詢數(shù)據(jù)

子查詢
1、定義
一個(gè)select語(yǔ)句中包含另一個(gè)select語(yǔ)句,那么被包含的select語(yǔ)句就是子查詢。
2、子查詢的分類
①、根據(jù)子查詢的位置:
where子查詢 子查詢出現(xiàn)在的where的表達(dá)式中
from子查詢 子查詢出現(xiàn)在的from后面的
②、根據(jù)查詢出來的結(jié)果
標(biāo)量子查詢 1 行1列
列子查詢 1列多行
行子查詢 1行多列
提示:以上標(biāo)量、列子查詢、行子查詢就是where子查詢
表子查詢 多行多表
提示:以表子查詢就是from子查詢
3、子查詢?cè)斀?br> 理解一下where表達(dá)式,就是根據(jù)字段與值的匹配情況進(jìn)行記錄的篩選


①、標(biāo)量子查詢

②、列子查詢

③、行子查詢
找老鄉(xiāng)

④、表子查詢
就from子查詢

小節(jié):
對(duì)于where子查詢,where子查詢得到的就是數(shù)據(jù),要求大家一定要清楚子查詢得到數(shù)據(jù)是一列一行,還是一列多行,還是一行多列。
所有的子查詢都必須使用括號(hào)括起來,
只要from子查詢需要起個(gè)別名。
⑤、exists子查詢
exists(查詢語(yǔ)句)

4、all、any、some
all、any、some都是用于針對(duì)一個(gè)集合(多個(gè)值)
all 所有
any 每一個(gè),任何一個(gè) some是any的同義詞,作用相同
all 表示 >最大的
<all 表示 <最小的
<>all 表示 not in

三、連接查詢
子查詢 VS 連接查詢
子查詢雖然涉及查詢多個(gè)表,但是最終結(jié)果的數(shù)據(jù)只來源一個(gè)表。
連接查詢就是將多個(gè)表的數(shù)據(jù)連接在一起顯示。
1、內(nèi)連接
①、隱式內(nèi)連接
語(yǔ)法:select 字段列表 from 表A,表B where 條件
提示:如果多表數(shù)據(jù)源沒有指定篩選條件,那么產(chǎn)生的迪卡爾積。
示例:使用篩選條件

②、顯式內(nèi)連接
語(yǔ)法:select 字段列表 from 表A 【inner】 join 表B where 條件

提示:同連接也稱之為等值連接(只有連接條件匹配的才會(huì)被保留)
2、外連接
①、左外連接
語(yǔ)法:
select 字段列表 from 表L left join 表R on 連接條件
②、右外連接
語(yǔ)法:select 字段列表 from 表L right join 表R on 連接條件
說明:無論左外連接,還是右外連接,最終結(jié)果中的匹配成功的記錄全都被保留。
對(duì)于匹配不成立:左外連接保存左表的部分,右外連接保存右表的部分
④、using關(guān)鍵字
using是用于指定連接的字段

3、擴(kuò)展(了解)
①、自然內(nèi)連接
自然內(nèi)連接就是為了簡(jiǎn)化內(nèi)連接,自然內(nèi)連接不需要指定連接條件,會(huì)自動(dòng)找兩個(gè)表中同名的字段進(jìn)行連接。
語(yǔ)法:select 字段列表 from 表A natural join 表B;
②、自然左外連接
就用于簡(jiǎn)化左外連接
語(yǔ)法:select 字段列表 from 表L natural left join 表R;
③、自然右外連接
就用于簡(jiǎn)化左外連接
語(yǔ)法:select 字段列表 from 表L natural right join 表R;
④、交差連接
語(yǔ)法:select 字段列表 from 表A cross join 表B where 條件

修改數(shù)據(jù):update 表名 set 字段名=值, 字段名=值, 字段名=值…【where子句】【limit子句】
刪除數(shù)據(jù):delete from 表名 【where子句】【limit子句】

存儲(chǔ)引擎(了解),校驗(yàn)集
存儲(chǔ)引擎:驅(qū)動(dòng)數(shù)據(jù)庫(kù)軟件對(duì)數(shù)據(jù)進(jìn)行向硬盤中進(jìn)行讀寫操作的。
查看存儲(chǔ)引擎:show engines;
MyIsam特性:不支持事務(wù)安全,不支持外鍵
InnoDB特性:支持事務(wù)安全,支持外鍵


查看字符集:show charset;
校驗(yàn)集就是某一種字符集的比較規(guī)則。
查看校驗(yàn)集:
show collation;
_cs casesensitive 大小寫敏感(區(qū)分大小寫)
_ci caseinsensitive 大小寫不敏感(不區(qū)分大小寫)
_bin 二進(jìn)制 區(qū)分大小寫

MySQL中的運(yùn)算符:
= 此符號(hào)在MySQL中即是賦值又是比較
、<、<>、>=、<=、or、and、in\not in、between m and n \ not between m and n
is null 專用于判斷null值的
is not null
<=> 安全相等運(yùn)算符,可以判斷null值與非Null值
like 主要用于模糊查詢,需要與兩個(gè)占位符配合使用 %、_
% 表示模糊部分,當(dāng)前位置及其后的0個(gè)或多個(gè)字符
_ 表示模糊部分,當(dāng)前位置的1個(gè)字符
not like

列類型——詳解
語(yǔ)法:
create table 表名(
字段1 列類型 【列屬性】,
字段2 列類型 【列屬性】,
……
)【表選項(xiàng)】


數(shù)值型
①、整數(shù)型
(unsigned)正整數(shù)

②、小數(shù)型

語(yǔ)法:
float(m,d);
double(m,d)
說明:
m表示所有的位數(shù)(包含整數(shù)與小數(shù)部分)
d表示小數(shù)位數(shù)
整數(shù)位數(shù)m-d
對(duì)浮點(diǎn)數(shù)會(huì)有丟失精度,一般很少使用
decimal(m,d)
說明:
m表示所有的倍數(shù)(包含整數(shù)位與小數(shù)位)
d表示小數(shù)位
整數(shù)位是m-d


字符型

①、定長(zhǎng)字符串:char(n);n最大是255
? n表示最多存儲(chǔ)的字符的個(gè)數(shù),
? 當(dāng)創(chuàng)建表時(shí),設(shè)置了字段為char(10),實(shí)際存儲(chǔ)5個(gè)字符,在硬盤中這5個(gè)字符實(shí)際所占的空間是10個(gè)。
②、變長(zhǎng)字符串:varchar(n);n最大是65535
集合類型set:set(值列表);
集合類型用于規(guī)定當(dāng)前字段所能取的值的列表,只能在值列表中取1個(gè)或多個(gè)值。

日期時(shí)間型
year表示年 格式:’yyyy’ 例如:’2017’
date表示日期 格式:’yyyy-mm-dd’ 例如:’2017-10-09’
time表示時(shí)間 格式:’hh:ii:ss’ 例如:’ 17:02:40’
datetime日期時(shí)間 格式:’yyyy-mm-dd hh:ii:ss’ 例如:’2017-10-09 17:02:40’
timestamp時(shí)間戳 格式:’yyyy-mm-dd hh:ii:ss’ 例如:’2017-10-09 17:02:40’
timestamp可以記錄當(dāng)前記錄被修改的時(shí)間

列屬性
create table 表名(
字段名 列類型 列屬性,
字段名 列類型 列屬性
)【表選項(xiàng)】
1、列類型 VS 列屬性
列類型限制的一條記錄中的某一個(gè)字段的取值類型。
列屬性是對(duì)某個(gè)字段在一整列上的約束。
2、null
說明:
當(dāng)向表中插入數(shù)據(jù)時(shí),如果沒有為某些字段提供值,那么這些字段會(huì)使用系統(tǒng)的默認(rèn)值Null
null很特殊,一般我們不允許表中出現(xiàn)null值
3、not null
用于約束字段的值不允許為Null(不允許MySQL使用自己的默認(rèn)值null來填充記錄)
4、default
default用于自定義默認(rèn)值,一般與not null聯(lián)合使用,



5、unique
unique唯一的意思,用于約束當(dāng)前字段中不能有重復(fù)的值出現(xiàn)。
unique的特點(diǎn):
字段的值不允許重復(fù),但允許為Null值,原因是null值不等于null
6、primary key
Primary key是一種索引
說明:
primary key約束特點(diǎn)是唯一且不允許為null
7、auto_increment
auto_increment是自增長(zhǎng)的意思,主要有于解決主鍵的值的問題,與primary key一同使用,實(shí)現(xiàn)主鍵的值的遞增。
auto_increment只能應(yīng)用給整數(shù)類型,而且只能是primary key或unique
8、復(fù)合主鍵(了解)
多個(gè)字段共同作用為一個(gè)主鍵。
語(yǔ)法:
primary key(字段1,字段2…);
說明:
只要組成復(fù)合主鍵的兩個(gè)字段的值同時(shí)相同才算重復(fù)。
10、備注 comment

修改表結(jié)構(gòu)
alter table 表名 add|drop |modify|change |rename 字段名 列類型 列屬性 first|after字段名
修改列類型:change即可以修改字段名也能修改字段類型
修改列類型:modify只能修改字段類型
修改表名:alter table 表名 rename to 新表名;
修改列屬性
①、增加列屬性
增加非主鍵列屬性:alter table 表名 modify 字段名 列類型 列屬性 first|after字段名
增加主鍵列屬性:alter table 表名 add primary key(主鍵字段)
②、刪除屬性
刪除非主鍵列屬性:alter table 表名 modify 字段名 列類型
刪除unique:alter table test_modify drop key 唯一鍵的索引名;
說明:
默認(rèn)唯一鍵的索引名就是字段名
刪除主鍵:alter table 表名 drop primary key;
說明:
如果primary key與auto_increment聯(lián)合使用,那么在刪除primary key之前,要先刪除auto_increment屬性

高級(jí)操作

1、復(fù)制表結(jié)構(gòu)
語(yǔ)法:
create table 表B like 表A
說明:
創(chuàng)建一個(gè)表B,表的結(jié)構(gòu)與表A完全相同,但不包含其中的數(shù)據(jù)
2、備份SQL執(zhí)行結(jié)果
語(yǔ)法:
create table 表名 select 語(yǔ)句;
說明:
使用select語(yǔ)句查詢到的數(shù)據(jù),創(chuàng)建一個(gè)表
3、限制更新
語(yǔ)法:
update 表名 set 字段名=值, 字段名=值 【where子句】【limit子句】
說明:
只更改where子句中匹配到的記錄中的limit子句所限制的行數(shù)。
4、限制刪除
語(yǔ)法:
delete from 表名 【where子句】【limit子句】
說明:
只刪除where子句中匹配到的記錄中的limit子句所限制的行數(shù)。
5、批量插入
語(yǔ)法:
insert into 表A【(字段列表)】 select 語(yǔ)句;
說明:
將select語(yǔ)句得到的數(shù)據(jù),一次性插入到表A中。
6、蠕蟲復(fù)制
說明:
在批量插入的基礎(chǔ)上,將數(shù)據(jù)來源表與數(shù)據(jù)插入的表設(shè)置為同一個(gè)表。那么這種情況就形象的稱之為蠕蟲復(fù)制。
7、主鍵沖突
①、沖突更新
語(yǔ)法:
insert into 表名【(字段列表)】 values(值列表) on duplicate key update 字段=值, 字段=值,…
說明:
在向數(shù)據(jù)表中插入數(shù)據(jù)時(shí),如果遇到主鍵或唯一鍵沖突,那么就執(zhí)行更新操作。
②、沖突替換
語(yǔ)法:
replace into 表名【(字段列表)】 values(值列表) ;
說明:
在向數(shù)據(jù)表中插入數(shù)據(jù)時(shí),如果遇到主鍵或唯一鍵沖突,那么就將原記錄完全替換掉。
8、清空表
①、delete
delete from 表名;
說明:
如果不加where與limit則會(huì)將數(shù)據(jù)表中所有的數(shù)據(jù)刪除
使用delete刪除表中所有的數(shù)據(jù)時(shí),并不會(huì)重建索引(主鍵并不會(huì)重置)
②、truncate
truncate 表名;
說明:
將數(shù)據(jù)表中所有的記錄都刪除
使用truncate刪除表中所有的數(shù)據(jù)時(shí),會(huì)重建索引(主鍵會(huì)重置)

外鍵


表B的某個(gè)字段的取值,必須是表A主鍵字段中的1個(gè);而且這種關(guān)系不需要人為的控制,是由MySQL自己來約束
表B中被約束的字段就叫外鍵
表B稱之為從表
表A稱之為主表
使用A表中的一個(gè)列的值來約束B表中的某個(gè)字段的取值范圍

創(chuàng)建外鍵,必須先創(chuàng)建主表,再創(chuàng)建從表。
語(yǔ)法:foreign key(外鍵字段) references 主表(主鍵字段)
說明:foreign 外的意思
references 參考,參照

外鍵的約束
①、從表被主表約束
當(dāng)主表與從表建立外鍵關(guān)系后,從表的外鍵字段的值必須是主表的主鍵字段值中的一個(gè)。
對(duì)從表的外鍵字段的更新,同樣要滿足約束。
②、主表被從表約束
不能隨意刪除主表
主表的記錄不能隨意更新
③、置空(null)約束與級(jí)聯(lián)約束
默認(rèn)主表中的記錄是不能隨意刪除或修改,但是實(shí)現(xiàn)工作中,此需求是很正常,所以外鍵又提供了置空(null)約束與級(jí)聯(lián)約束。
on delete set null
置空約束 當(dāng)主表的記錄被刪除后,從表中被約束的外鍵的值設(shè)置null
on update cascade
級(jí)聯(lián)約束 當(dāng)主表的主鍵字段被修改后,從表中被約束的外鍵的同時(shí)更改為相應(yīng)的值

刪除外鍵:alert table 表名 drop foreign key 約束名
說明:刪除外鍵需要知道外鍵的約束名,可以使用show create table 表名來查看

添加外鍵
注意:如果是一個(gè)已經(jīng)存在的表,而且表中有數(shù)據(jù),那么在添加外鍵之前,兩個(gè)表中的外鍵約束的數(shù)據(jù)一定要滿足條件
語(yǔ)法:alter table 表名 add forien key(外鍵字段) references 主表(主鍵字段) 【on update cascade】【on delete set null】

數(shù)據(jù)備份

1、sql備份與還原
①、sql的備份
只備份sql語(yǔ)句。
備份的工具:



運(yùn)行環(huán)境是cmd窗口。
語(yǔ)法:
mysqldump –uroot –p 數(shù)據(jù)庫(kù)名【表名】 > 備份文件
②、還原
語(yǔ)法:mysql –uroot –p 數(shù)據(jù)庫(kù)名 < 備份文件
2、數(shù)據(jù)備份
數(shù)據(jù)備份需要先登陸到mysql
①、數(shù)據(jù)的備份
語(yǔ)法:select 字段名 from 表名 where 條件 into outfile ‘備份文件’ 【fields選項(xiàng)】【lines選項(xiàng)】
說明:
fields用于設(shè)置字段的相關(guān)信息
以fields開頭
terminated by 設(shè)置字段與字段之間的分隔符 默認(rèn)為tab
enclosed by 設(shè)置字段的包裹 默認(rèn)是空字符’’
esacped by 設(shè)置null值使用什么代替 默認(rèn)\N
lines用于設(shè)置記錄的相關(guān)信息
以lines開頭
starting by 設(shè)置一行的開始符號(hào)
terminated by 設(shè)置一行的結(jié)束符號(hào) 默認(rèn)\r\n
②、數(shù)據(jù)的還原
注意:數(shù)據(jù)還原時(shí)表結(jié)構(gòu)一定要有
語(yǔ)法:
load date local infile ‘備份文件’ into table 表名 【fields選項(xiàng)】【lines選項(xiàng)】

用戶管理

1、查看用戶
msyql的用戶信息都保存在mysql數(shù)據(jù)庫(kù)的user表中



2、創(chuàng)建用戶
語(yǔ)法:
create user ‘登陸名’@’用戶的標(biāo)識(shí)’ identified by ‘密碼’;
說明:
用戶標(biāo)識(shí)分以下幾種:
localhost 本機(jī)
IP 127.0.0.1 本機(jī)
% 不限制
3、授予權(quán)限
新創(chuàng)建的用戶是沒有任何權(quán)限的,必須為用戶授權(quán)。
語(yǔ)法:grant all privileges|權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 to ‘登陸名’@’用戶標(biāo)識(shí)’;
4、收回權(quán)限
語(yǔ)法:revoke all privileges|權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 from ‘登陸名’@’用戶標(biāo)識(shí)’;
5、刪除用戶
語(yǔ)法:drop user ‘登陸名’@’標(biāo)識(shí)’;
6、重置root密碼
①、關(guān)閉mysql服務(wù)
②、開啟服務(wù)
使用mysqld.exe工具跳過授權(quán)表啟動(dòng)msyql




③、重新開啟一個(gè)cmd窗口,不需使用用戶名就可以登陸mysql

④、修改root用戶的密碼



⑤、關(guān)閉第2步中處于掛起的窗口,并在任務(wù)管理器中結(jié)束msyqld服務(wù)

⑥、正常啟動(dòng)mysql服務(wù)程序,使用新密碼進(jìn)行登陸

mysql高級(jí)

視圖view
1、視圖簡(jiǎn)介
view的意思視窗,窗口的意思,在MySQL中翻譯為視圖;視圖是mysql中的一種特殊的表,視圖就是一條SELECT語(yǔ)句執(zhí)行后返回的結(jié)果集
創(chuàng)建語(yǔ)句:
視圖是MySQL中的一種特殊的表,但是這種表并不是由創(chuàng)建表的語(yǔ)句所創(chuàng)建,而是由select語(yǔ)句所創(chuàng)建。
表結(jié)構(gòu):
視圖是MySQL中的一種虛擬表,視圖的結(jié)構(gòu)是由創(chuàng)建視圖的select語(yǔ)句查詢出的字段所創(chuàng)建。
表的數(shù)據(jù):
MySQL中的視圖并沒有專屬于自己的數(shù)據(jù),視圖的數(shù)據(jù)來源于創(chuàng)建視圖的select語(yǔ)句所查詢的數(shù)據(jù)表。
2、創(chuàng)建視圖
語(yǔ)句:create 【or replace】 【algorithm=算法】 view 視圖名 as select語(yǔ)句
說明:
【or replace】 用于替換視圖
【algorithm=算法】 用于設(shè)置視圖的算法


創(chuàng)建視圖的那個(gè)表就是基表

3、查看視圖
語(yǔ)法:show tables;
4、視圖操作
視圖也是一種表,但是如果是實(shí)際的表,那么我就可以進(jìn)行增、刪、改、查。但視圖更主要的作用是進(jìn)行查詢。
如果是查詢操作,視圖與實(shí)際的表沒有任何的區(qū)別。
視圖也可以進(jìn)行增、刪、修改操作,但是限制會(huì)非常多。
視圖的特點(diǎn):
對(duì)基表的數(shù)據(jù)的任何更改都會(huì)即時(shí)的反映在視圖中。
視圖可以分為單表視圖與多表視圖:
單表視圖就是創(chuàng)建視圖的select語(yǔ)句只訪問了1個(gè)表
多表視圖就是創(chuàng)建視圖的select語(yǔ)句訪問了多個(gè)表。
個(gè)人理解:
視圖就是將一個(gè)sql語(yǔ)句保存起來,并命名,之后對(duì)這個(gè)視圖的訪問,會(huì)觸發(fā),創(chuàng)建視圖的那個(gè)select語(yǔ)句的執(zhí)行。
5、修改視圖
語(yǔ)句:create 【or replace】 【algorithm=算法】 view 視圖名 as select語(yǔ)句
說明:如果是修改一個(gè)已經(jīng)存在的視圖,需要使用or replace即可。
6、刪除視圖
語(yǔ)法:drop view 視圖名;
7、視圖算法
①、查看視圖算法
show create table 視圖名;

②、視圖算法分類:
首先必須明確:
與一個(gè)視圖相關(guān)的有兩條select語(yǔ)句,其一是創(chuàng)建視圖的那個(gè)select,其二是查詢視圖的select;
視圖的算法說的就是這兩條select語(yǔ)句的執(zhí)行順序
temptable 臨時(shí)算法,當(dāng)查詢一個(gè)視圖時(shí),先執(zhí)行創(chuàng)建視圖的select語(yǔ)句,將產(chǎn)生的結(jié)果保存內(nèi)存中的一個(gè)臨時(shí)表,之后在這個(gè)臨時(shí)表的基礎(chǔ)上再執(zhí)行查詢視圖的select語(yǔ)句

merge 合并算法,當(dāng)查詢一個(gè)視圖時(shí),會(huì)將創(chuàng)建視圖的select語(yǔ)句與,查詢視圖的select語(yǔ)句進(jìn)行合并為一條sql再執(zhí)行。
undefined 未定義,MySQL會(huì)自己決定使用temptable還是merge,絕大多數(shù)會(huì)選擇merge算法

小節(jié):
對(duì)視圖的理解:就是使用一個(gè)類似于表名的來保存一條復(fù)雜的select語(yǔ)句。
視圖算法:就是兩條select語(yǔ)句的執(zhí)行順序。

觸發(fā)器
1、觸發(fā)器的概念
一類特殊的數(shù)據(jù)庫(kù)程序,可以監(jiān)視某種數(shù)據(jù)的操作(insert/update/delete),并觸發(fā)相關(guān)的操作(insert/update/delete),保護(hù)數(shù)據(jù)的完整性(就是對(duì)當(dāng)某一個(gè)表進(jìn)行update、delete、insert操作時(shí),會(huì)觸發(fā)一段代碼的執(zhí)行。)
2、觸發(fā)器的要素
觸發(fā)事件: insert、update、delete
觸發(fā)時(shí)機(jī): before、after 例如:before update、after update
觸發(fā)對(duì)象: 數(shù)據(jù)表
范圍: 每一行記錄
3、創(chuàng)建語(yǔ)法
語(yǔ)法:
create trigger 時(shí)機(jī) 事件 on 數(shù)據(jù)表 for each row
begin
所觸發(fā)執(zhí)行的代碼
end;



4、觸發(fā)器記錄對(duì)象
old、new
old與new代表的是orderlist表,所改變的記錄的之前與之后的狀態(tài)。
old new
update 沒有修改之前的記錄 修改之后的記錄
insert null 新增的記錄
delete 刪除之前的記錄 null


5、查看觸發(fā)器
語(yǔ)法:
show create trigger 觸 發(fā)器名
語(yǔ)法:
show triggers;
6、刪除觸發(fā)器
語(yǔ)法:
drop trigger 觸發(fā)器名

事務(wù)
1、事務(wù)
事務(wù)是MySQL的一種機(jī)制,主要用于保證使用多條SQL語(yǔ)句,來完成現(xiàn)實(shí)中的一件事時(shí),保證結(jié)果的一致。
事務(wù)操作
①、開啟事務(wù)
start transaction;
說明:
執(zhí)行此語(yǔ)句后,任何的sql對(duì)數(shù)據(jù)庫(kù)的更改,都不會(huì)立即反應(yīng)到數(shù)據(jù)庫(kù)中。
②、執(zhí)行事務(wù)中的sql
//完成現(xiàn)實(shí)中的事情的多條sql。
③、根據(jù)事務(wù)中的sql的執(zhí)行結(jié)果進(jìn)行提交或回滾
提交:commit;
說明:
將事務(wù)中的sql對(duì)數(shù)據(jù)庫(kù)的更改,寫到數(shù)據(jù)庫(kù)中
回滾:rollback
說明:
將事務(wù)中的sql對(duì)數(shù)據(jù)庫(kù)的更改,全部刪除。
提示:
當(dāng)執(zhí)行start transaction語(yǔ)句后,再執(zhí)行commit或rollback那么這個(gè)事務(wù)就結(jié)束了。



臟讀(dirty read)



4、回滾點(diǎn)
語(yǔ)法:
savepoint 回滾點(diǎn)名;
說明:
回滾點(diǎn)就是事務(wù)執(zhí)行過程上的一個(gè)保存點(diǎn)
語(yǔ)法:
rollbak to 回滾點(diǎn)名;
說明:
只回滾到指定的回滾點(diǎn)

5、事務(wù)的特性ACID(了解)
Atomicity 原子性
事務(wù)不可再分,可以保證多條sql要么全部成功,要么全部失敗。
Consitency 一致性
當(dāng)事務(wù)開始執(zhí)行時(shí),對(duì)硬盤中的數(shù)據(jù)沒有影響。
Isolation 隔離性
多個(gè)事務(wù)的執(zhí)行互不影響
Durability 持久性
當(dāng)事務(wù)提交后,影響是永久的。

變量
MySQL主要是用于存儲(chǔ)數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行增、刪、改、查。但是MySQL也是一種程序語(yǔ)言,也可以定義變量、流程控制、定義函數(shù)、定義存儲(chǔ)過程。
1、MySQL的系統(tǒng)變量
①、查看預(yù)定義的變量
語(yǔ)法:
show variables【 like pattern】
說明:
【like pattern】 用于模糊查詢


②、修改系統(tǒng)變量的值
語(yǔ)法:
set 系統(tǒng)變量=值;
說明:
以上系統(tǒng)變量的更改只影響當(dāng)前客戶端
③、全局系統(tǒng)變量的設(shè)置
語(yǔ)法:
set global 系統(tǒng)變量=值;
說明:
以上系統(tǒng)變量的更改只影響所有新連接進(jìn)來的客戶端。
2、自定義變量
①、定義
語(yǔ)法:
set @變量名=值;
說明:
為了區(qū)分自定義變量與系統(tǒng)變量。自定義變量前需要使用@

②、訪問
語(yǔ)法:
select 變量名:
系統(tǒng)變量的訪問使用show,但是自定義變量的訪問使用select

自定義變量的賦值

③、將字段的值賦值變量

④、局部變量
語(yǔ)法:
declare 變量名 類型 【default 默認(rèn)值】
說明:
只能用在函數(shù)內(nèi)

函數(shù)
1、系統(tǒng)函數(shù)
字符串處理函數(shù)
LTrim(): 去除左邊的空格
RTrim(): 去除右邊的空格
Upper(): 返回大寫字符。Strtolower.
Lower(): 返回小寫字符。strtoupper
Char_length(): 返回字符的個(gè)數(shù)。
Left(str,len) : 返回串左邊指定數(shù)目的字符.
Right(str,len): 返回串右邊指定數(shù)目的字符
concat(str1,str2): 連接子字符串
SubString(str,start[,len]):返回子串的字符,mid()同名函數(shù)。(substr)
位置從1開始。
Instr(父串,子串):第一個(gè)出現(xiàn)的位置。位置從1開始。沒有找到,返回0.類似于
日期時(shí)間函數(shù)
? now():獲取當(dāng)前時(shí)間日期
? Date() :返回日期時(shí)間的日期部分.當(dāng)前日期curdate().
? Time() :返回一個(gè)日期的時(shí)間部分.當(dāng)前時(shí)間curtime().
? DateDiff() :求兩個(gè)日期的差
? Year():返回一個(gè)日期的年份部分
? Date_add(日期,interval 數(shù)字 單位),向日期添加時(shí)間間隔
quarter()
month()
day()
數(shù)學(xué)函數(shù)
ABS(x) 返回x的絕對(duì)值
CEILING(x) 返回大于x的最小整數(shù)值
FLOOR(x) 返回小于x的最大整數(shù)值
GREATEST(x1,x2,...,xn)返回集合中最大的值
LEAST(x1,x2,...,xn) 返回集合中最小的值
MOD(x,y) 返回x/y的模(余數(shù))
RAND()返回0到1內(nèi)的隨機(jī)值
ROUND(x,y)返回參數(shù)x的四舍五入的有y位小數(shù)的值
其他函數(shù)
Md5():32位加密函數(shù)。主要用于對(duì)密碼字段進(jìn)行加密
Version():查詢版本號(hào)。
Datebase():當(dāng)前選擇數(shù)據(jù)庫(kù)
2、自定義函數(shù)
①、定義
語(yǔ)法:
create function 函數(shù)名(變量 類型,變量 類型…) returns 類型
begin
//函數(shù)體
return 值;
end;
說明:
函數(shù)的定義必須指定返回值的類型
函數(shù)體內(nèi)部必須有返回值,
函數(shù)內(nèi)部不能使用select語(yǔ)句


②、函數(shù)的調(diào)用
語(yǔ)法:
select 函數(shù)名(實(shí)參)

③、作用域
分全局作用域與局部作用域
全局作用域:使用set @變量=值,定義的變量其他作用域就是全局作用域
局部作用域:在函數(shù)內(nèi)部使用declear聲明的變量就是局部變量,其作用域就是局部作用域
局部變量
語(yǔ)法:
declare 變量名 類型 【default 默認(rèn)值】
說明:
只能用在函數(shù)內(nèi)
image.png


④、查看函數(shù)
語(yǔ)法:
show function status\G
3、流程控制
①、if
語(yǔ)法:
if 表達(dá)式 then
//語(yǔ)句體
else
//缺省語(yǔ)句體
end if;
說明:
只有雙分支沒有多分支
②、while循環(huán)
語(yǔ)法:
while 表達(dá)式 do
循環(huán)體
end while;

存儲(chǔ)過程procedure

1、簡(jiǎn)介:存儲(chǔ)過程就是一個(gè)特殊的函數(shù)。
2、創(chuàng)建存儲(chǔ)過程
語(yǔ)法:
create procedure 過程名(方向 變量1 類型,方向 變量2 類型)
begin
//過程代碼
end;
說明:
方向 in out inout
從外向里: in可以接收外部傳遞進(jìn)來的數(shù)據(jù)
out不能接收外部傳遞進(jìn)來的數(shù)據(jù)
inout可以接收外部傳遞的數(shù)據(jù)
從里向外: in不能將值傳遞出來
out可以將值傳遞出來
inout可以將值傳送出來



存儲(chǔ)過程的調(diào)用:
call 過程名(實(shí)參);




3、查看存儲(chǔ)過程
語(yǔ)法:
show procedure status;

4、刪除存儲(chǔ)過程
語(yǔ)法:
drop procedure 過程名;

函數(shù)
定義語(yǔ)法中必須有returns,函數(shù)體也必須有return
函數(shù)中不能有select語(yǔ)句
函數(shù)的調(diào)用使用select
存儲(chǔ)過程
定義的語(yǔ)法中形參需要有方向(方向解決的是傳遞方式)
過程中可以有select語(yǔ)句

過程的調(diào)用使用call
存儲(chǔ)過程procedure
1、簡(jiǎn)介
存儲(chǔ)過程就是一個(gè)特殊的函數(shù)。
2、創(chuàng)建存儲(chǔ)過程
語(yǔ)法:
create procedure 過程名(方向 變量1 類型,方向 變量2 類型)
begin
//過程代碼
end;
說明:
方向 in out inout
從外向里: in可以接收外部傳遞進(jìn)來的數(shù)據(jù)
out不能接收外部傳遞進(jìn)來的數(shù)據(jù)
inout可以接收外部傳遞的數(shù)據(jù)
從里向外: in不能將值傳遞出來
out可以將值傳遞出來
inout可以將值傳送出來
存儲(chǔ)過程的調(diào)用:
call 過程名(實(shí)參);
3、查看存儲(chǔ)過程
語(yǔ)法:
show procedure status;
4、刪除存儲(chǔ)過程
語(yǔ)法:
drop procedure 過程名;
函數(shù)
定義語(yǔ)法中必須有returns,函數(shù)體也必須有return
函數(shù)中不能有select語(yǔ)句
函數(shù)的調(diào)用使用select
存儲(chǔ)過程
定義的語(yǔ)法中形參需要有方向(方向解決的是傳遞方式)
過程中可以有select語(yǔ)句
過程的調(diào)用使用call

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

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

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