MYSQL

作者:燁竹

數據庫的基本操作

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

數據表的基本操作

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



查看表結構:desc 表名
查看表的創(chuàng)建語句:show create table 表名\G;
刪除表:drop table 數據表名;

數據的操作

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

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

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


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


【where子句】作用:根據where子句中的表達式,在將數據從硬盤讀取到內存時進行第1次篩選。


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


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


【having 子句】
對group by得到的統(tǒng)計結果再進行第2次篩選。
提示:where表達式中,不能出現統(tǒng)計函數

【order by子句】
對最終的結果進行顯示順序上的控制。
語法:order by 字段1 【asc|desc】, 字段2 【asc|desc】,
說明:asc 缺省,升序
desc 降序

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

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

子查詢
1、定義
一個select語句中包含另一個select語句,那么被包含的select語句就是子查詢。
2、子查詢的分類
①、根據子查詢的位置:
where子查詢 子查詢出現在的where的表達式中
from子查詢 子查詢出現在的from后面的
②、根據查詢出來的結果
標量子查詢 1 行1列
列子查詢 1列多行
行子查詢 1行多列
提示:以上標量、列子查詢、行子查詢就是where子查詢
表子查詢 多行多表
提示:以表子查詢就是from子查詢
3、子查詢詳解
理解一下where表達式,就是根據字段與值的匹配情況進行記錄的篩選


①、標量子查詢

②、列子查詢

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

④、表子查詢
就from子查詢

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

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

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

②、顯式內連接
語法:select 字段列表 from 表A 【inner】 join 表B where 條件

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

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

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

存儲引擎(了解),校驗集
存儲引擎:驅動數據庫軟件對數據進行向硬盤中進行讀寫操作的。
查看存儲引擎:show engines;
MyIsam特性:不支持事務安全,不支持外鍵
InnoDB特性:支持事務安全,支持外鍵


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

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

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


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

②、小數型

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


字符型

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

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

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



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

修改表結構
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 唯一鍵的索引名;
說明:
默認唯一鍵的索引名就是字段名
刪除主鍵:alter table 表名 drop primary key;
說明:
如果primary key與auto_increment聯合使用,那么在刪除primary key之前,要先刪除auto_increment屬性

高級操作

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

外鍵


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

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

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

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

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

數據備份

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



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

用戶管理

1、查看用戶
msyql的用戶信息都保存在mysql數據庫的user表中



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




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

④、修改root用戶的密碼



⑤、關閉第2步中處于掛起的窗口,并在任務管理器中結束msyqld服務

⑥、正常啟動mysql服務程序,使用新密碼進行登陸

mysql高級

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


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

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

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

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

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

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



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


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

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



臟讀(dirty read)



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

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

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


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

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

自定義變量的賦值

③、將字段的值賦值變量

④、局部變量
語法:
declare 變量名 類型 【default 默認值】
說明:
只能用在函數內

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


②、函數的調用
語法:
select 函數名(實參)

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


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

存儲過程procedure

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



存儲過程的調用:
call 過程名(實參);




3、查看存儲過程
語法:
show procedure status;

4、刪除存儲過程
語法:
drop procedure 過程名;

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

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

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容