本單元目標(biāo)
一弄唧、為什么要學(xué)習(xí)數(shù)據(jù)庫(kù)
二、數(shù)據(jù)庫(kù)的相關(guān)概念
DBMS梆暮、DB割按、SQL
三、數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的特點(diǎn)
四、初始MySQL
MySQL產(chǎn)品的介紹
MySQL產(chǎn)品的安裝
MySQL服務(wù)的啟動(dòng)和停止
MySQL服務(wù)的登錄和退出
MySQL的常見(jiàn)命令和語(yǔ)法規(guī)范
五藏畅、DQL語(yǔ)言的學(xué)習(xí)
基礎(chǔ)查詢
條件查詢
排序查詢
常見(jiàn)函數(shù)
分組函數(shù)
分組查詢
連接查詢
子查詢 √
分頁(yè)查詢
union聯(lián)合查詢 √
六别厘、DML語(yǔ)言的學(xué)習(xí)
插入語(yǔ)句
修改語(yǔ)句
刪除語(yǔ)句
七、DDL語(yǔ)言的學(xué)習(xí)
庫(kù)和表的管理 √
常見(jiàn)數(shù)據(jù)類型介紹 √
常見(jiàn)約束 √
八哩俭、TCL語(yǔ)言的學(xué)習(xí)
事務(wù)和事務(wù)處理
九绷跑、視圖的講解 √
十、變量
十一凡资、存儲(chǔ)過(guò)程和函數(shù)
十二砸捏、流程控制結(jié)構(gòu)
數(shù)據(jù)庫(kù)的好處
1.持久化數(shù)據(jù)到本地
2.可以實(shí)現(xiàn)結(jié)構(gòu)化查詢,方便管理
數(shù)據(jù)庫(kù)相關(guān)概念
1隙赁、DB:數(shù)據(jù)庫(kù)垦藏,保存一組有組織的數(shù)據(jù)的容器
2、DBMS:數(shù)據(jù)庫(kù)管理系統(tǒng)伞访,又稱為數(shù)據(jù)庫(kù)軟件(產(chǎn)品)掂骏,用于管理DB中的數(shù)據(jù)
3、SQL:結(jié)構(gòu)化查詢語(yǔ)言咐扭,用于和DBMS通信的語(yǔ)言
數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的特點(diǎn)
1芭挽、將數(shù)據(jù)放到表中滑废,表再放到庫(kù)中
2、一個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè)表袜爪,每個(gè)表都有一個(gè)的名字蠕趁,用來(lái)標(biāo)識(shí)自己。表名具有唯一性辛馆。
3俺陋、表具有一些特性,這些特性定義了數(shù)據(jù)在表中如何存儲(chǔ)昙篙,類似java中 “類”的設(shè)計(jì)腊状。
4、表由列組成苔可,我們也稱為字段缴挖。所有表都是由一個(gè)或多個(gè)列組成的,每一列類似java 中的”屬性”
5焚辅、表中的數(shù)據(jù)是按行存儲(chǔ)的映屋,每一行類似于java中的“對(duì)象”。
MySQL產(chǎn)品的介紹和安裝
MySQL服務(wù)的啟動(dòng)和停止
方式一:計(jì)算機(jī)——右擊管理——服務(wù)
方式二:通過(guò)管理員身份運(yùn)行
net start 服務(wù)名(啟動(dòng)服務(wù))
net stop 服務(wù)名(停止服務(wù))
MySQL服務(wù)的登錄和退出
方式一:通過(guò)mysql自帶的客戶端
只限于root用戶
方式二:通過(guò)windows自帶的客戶端
登錄:
mysql 【-h主機(jī)名 -P端口號(hào) 】-u用戶名 -p密碼
退出:
exit或ctrl+C
MySQL的常見(jiàn)命令
1.查看當(dāng)前所有的數(shù)據(jù)庫(kù)
show databases;
2.打開(kāi)指定的庫(kù)
use 庫(kù)名
3.查看當(dāng)前庫(kù)的所有表
show tables;
4.查看其它庫(kù)的所有表
show tables from 庫(kù)名;
5.創(chuàng)建表
create table 表名(
列名 列類型,
列名 列類型同蜻,
棚点。。湾蔓。
);
6.查看表結(jié)構(gòu)
desc 表名;
7.查看服務(wù)器的版本
方式一:登錄到mysql服務(wù)端
select version();
方式二:沒(méi)有登錄到mysql服務(wù)端
mysql --version
或
mysql --V
MySQL的語(yǔ)法規(guī)范
1.不區(qū)分大小寫,但建議關(guān)鍵字大寫瘫析,表名、列名小寫
2.每條命令最好用分號(hào)結(jié)尾
3.每條命令根據(jù)需要默责,可以進(jìn)行縮進(jìn) 或換行
4.注釋
單行注釋:#注釋文字
單行注釋:-- 注釋文字
多行注釋:/* 注釋文字 */
SQL的語(yǔ)言分類
DQL(Data Query Language):數(shù)據(jù)查詢語(yǔ)言
select
DML(Data Manipulate Language):數(shù)據(jù)操作語(yǔ)言
insert 贬循、update、delete
DDL(Data Define Languge):數(shù)據(jù)定義語(yǔ)言
create傻丝、drop甘有、alter
TCL(Transaction Control Language):事務(wù)控制語(yǔ)言
commit诉儒、rollback
SQL的常見(jiàn)命令
show databases葡缰; 查看所有的數(shù)據(jù)庫(kù)
use 庫(kù)名; 打開(kāi)指定 的庫(kù)
show tables ; 顯示庫(kù)中的所有表
show tables from 庫(kù)名;顯示指定庫(kù)中的所有表
create table 表名(
字段名 字段類型,
字段名 字段類型
); 創(chuàng)建表
desc 表名; 查看指定表的結(jié)構(gòu)
select * from 表名;顯示表中的所有數(shù)據(jù)
DQL語(yǔ)言的學(xué)習(xí)
進(jìn)階1:基礎(chǔ)查詢
語(yǔ)法:
SELECT 要查詢的東西
【FROM 表名】;
類似于Java中 :System.out.println(要打印的東西);
特點(diǎn):
①通過(guò)select查詢完的結(jié)果 忱反,是一個(gè)虛擬的表格泛释,不是真實(shí)存在
② 要查詢的東西 可以是常量值、可以是表達(dá)式温算、可以是字段怜校、可以是函數(shù)
進(jìn)階2:條件查詢
條件查詢:根據(jù)條件過(guò)濾原始表的數(shù)據(jù),查詢到想要的數(shù)據(jù)
語(yǔ)法:
select
要查詢的字段|表達(dá)式|常量值|函數(shù)
from
表
where
條件 ;
分類:
一注竿、條件表達(dá)式
示例:salary>10000
條件運(yùn)算符:
> < >= <= = != <>
二茄茁、邏輯表達(dá)式
示例:salary>10000 && salary<20000
邏輯運(yùn)算符:
and(&&):兩個(gè)條件如果同時(shí)成立魂贬,結(jié)果為true,否則為false
or(||):兩個(gè)條件只要有一個(gè)成立裙顽,結(jié)果為true付燥,否則為false
not(!):如果條件成立,則not后為false愈犹,否則為true
三键科、模糊查詢
示例:last_name like 'a%' '_'匹配一個(gè)字符,'%'匹配任意多個(gè)字符
between ... and ... | not between ... and ...
in | not in
is null | is not null
進(jìn)階3:排序查詢
語(yǔ)法:
select
要查詢的東西
from
表
where
條件
order by 排序的字段|表達(dá)式|函數(shù)|別名 【asc|desc】
進(jìn)階4:常見(jiàn)函數(shù)
一、單行函數(shù)
1漩怎、字符函數(shù)
concat拼接
substr截取子串
upper轉(zhuǎn)換成大寫
lower轉(zhuǎn)換成小寫
trim去前后指定的空格和字符
ltrim去左邊空格
rtrim去右邊空格
replace替換
lpad左填充
rpad右填充
instr返回子串第一次出現(xiàn)的索引
length 獲取字節(jié)個(gè)數(shù)
2勋颖、數(shù)學(xué)函數(shù)
round 四舍五入
rand 隨機(jī)數(shù)
floor向下取整
ceil向上取整
mod取余
truncate截?cái)?3、日期函數(shù)
now當(dāng)前系統(tǒng)日期+時(shí)間
curdate當(dāng)前系統(tǒng)日期
curtime當(dāng)前系統(tǒng)時(shí)間
str_to_date 將字符轉(zhuǎn)換成日期
date_format將日期轉(zhuǎn)換成字符
4勋锤、流程控制函數(shù)
if (條件判斷語(yǔ)句, 返回值1, 返回值2)
case 要判斷的字段或表達(dá)式
when 常量1 then 要顯示的值1或語(yǔ)句1
when 常量2 then 要顯示的值2或語(yǔ)句2
case
when 條件1 then 要顯示的值1或語(yǔ)句1
when 條件2 then 要顯示的值2或語(yǔ)句2
5饭玲、其他函數(shù)
version版本
database當(dāng)前庫(kù)
user當(dāng)前連接用戶
二、分組函數(shù)
sum 求和
max 最大值
min 最小值
avg 平均值
count 計(jì)數(shù)
特點(diǎn):
1叁执、以上五個(gè)分組函數(shù)都忽略null值咱枉,除了count(*)
2、sum和avg一般用于處理數(shù)值型
max徒恋、min蚕断、count可以處理任何數(shù)據(jù)類型
3、都可以搭配distinct使用入挣,用于統(tǒng)計(jì)去重后的結(jié)果
4亿乳、count的參數(shù)可以支持:
字段、*径筏、常量值葛假,一般放1
建議使用 count(*)
進(jìn)階5:分組查詢
語(yǔ)法:
select 查詢的字段,分組函數(shù)
from 表
group by 分組的字段
特點(diǎn):
1滋恬、可以按單個(gè)字段分組
2聊训、和分組函數(shù)一同查詢的字段最好是分組后的字段
3、分組篩選
針對(duì)的表 位置 關(guān)鍵字
分組前篩選: 原始表 group by的前面 where
分組后篩選: 分組后的結(jié)果集 group by的后面 having
4恢氯、可以按多個(gè)字段分組带斑,字段之間用逗號(hào)隔開(kāi)
5、可以支持排序
6勋拟、having后可以支持別名
進(jìn)階6:多表連接查詢
笛卡爾乘積:如果連接條件省略或無(wú)效則會(huì)出現(xiàn)
解決辦法:添加上連接條件
一勋磕、傳統(tǒng)模式下的連接 :等值連接——非等值連接
1.等值連接的結(jié)果 = 多個(gè)表的交集
2.n表連接,至少需要n-1個(gè)連接條件
3.多個(gè)表不分主次敢靡,沒(méi)有順序要求
4.一般為表起別名挂滓,提高閱讀性和性能
二、sql99語(yǔ)法:通過(guò)join關(guān)鍵字實(shí)現(xiàn)連接
含義:1999年推出的sql語(yǔ)法
支持:
等值連接啸胧、非等值連接 (內(nèi)連接)
外連接
交叉連接
語(yǔ)法:
select 字段赶站,...
from 表1
【inner|left outer|right outer|cross】join 表2 on 連接條件
【inner|left outer|right outer|cross】join 表3 on 連接條件
【where 篩選條件】
【group by 分組字段】
【having 分組后的篩選條件】
【order by 排序的字段或表達(dá)式】
好處:語(yǔ)句上幔虏,連接條件和篩選條件實(shí)現(xiàn)了分離,簡(jiǎn)潔明了贝椿!
三所计、自連接
案例:查詢員工名和直接上級(jí)的名稱
sql99
SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m ON e.`manager_id`=m.`employee_id`;
sql92
SELECT e.last_name,m.last_name
FROM employees e,employees m
WHERE e.`manager_id`=m.`employee_id`;
進(jìn)階7:子查詢
含義:
一條查詢語(yǔ)句中又嵌套了另一條完整的select語(yǔ)句,其中被嵌套的select語(yǔ)句团秽,稱為子查詢或內(nèi)查詢
在外面的查詢語(yǔ)句主胧,稱為主查詢或外查詢
特點(diǎn):
1、子查詢都放在小括號(hào)內(nèi)
2习勤、子查詢可以放在from后面踪栋、select后面、where后面图毕、having后面夷都,但一般放在條件的右側(cè)
3、子查詢優(yōu)先于主查詢執(zhí)行予颤,主查詢使用了子查詢的執(zhí)行結(jié)果
4囤官、子查詢根據(jù)查詢結(jié)果的行數(shù)不同分為以下兩類:
① 單行子查詢
結(jié)果集只有一行
一般搭配單行操作符使用:> < = <> >= <=
非法使用子查詢的情況:
a、子查詢的結(jié)果為一組值
b蛤虐、子查詢的結(jié)果為空
② 多行子查詢
結(jié)果集有多行
一般搭配多行操作符使用:any党饮、all、in驳庭、not in
in: 屬于子查詢結(jié)果中的任意一個(gè)就行
any和all往往可以用其他查詢代替
進(jìn)階8:分頁(yè)查詢
應(yīng)用場(chǎng)景:
實(shí)際的web項(xiàng)目中需要根據(jù)用戶的需求提交對(duì)應(yīng)的分頁(yè)查詢的sql語(yǔ)句
語(yǔ)法:
select 字段|表達(dá)式,...
from 表
【where 條件】
【group by 分組字段】
【having 條件】
【order by 排序的字段】
limit 【起始的條目索引刑顺,】條目數(shù);
特點(diǎn):
1.起始條目索引從0開(kāi)始
2.limit子句放在查詢語(yǔ)句的最后
3.公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage
假如:
每頁(yè)顯示條目數(shù)sizePerPage
要顯示的頁(yè)數(shù) page
進(jìn)階9:聯(lián)合查詢
引入:
union 聯(lián)合、合并
語(yǔ)法:
select 字段|常量|表達(dá)式|函數(shù) 【from 表】 【where 條件】 union 【all】
select 字段|常量|表達(dá)式|函數(shù) 【from 表】 【where 條件】 union 【all】
select 字段|常量|表達(dá)式|函數(shù) 【from 表】 【where 條件】 union 【all】
.....
select 字段|常量|表達(dá)式|函數(shù) 【from 表】 【where 條件】
特點(diǎn):
1饲常、多條查詢語(yǔ)句的查詢的列數(shù)必須是一致的
2蹲堂、多條查詢語(yǔ)句的查詢的列的類型幾乎相同
3、union代表去重贝淤,union all代表不去重
DML語(yǔ)言
插入
語(yǔ)法:
insert into 表名(字段名柒竞,...)
values(值1,...);
特點(diǎn):
1播聪、字段類型和值類型一致或兼容朽基,而且一一對(duì)應(yīng)
2、可以為空的字段犬耻,可以不用插入值踩晶,或用null填充
3执泰、不可以為空的字段枕磁,必須插入值
4、字段個(gè)數(shù)和值的個(gè)數(shù)必須一致
5术吝、字段可以省略计济,但默認(rèn)所有字段茸苇,并且順序和表中的存儲(chǔ)順序一致
修改
修改單表語(yǔ)法:
update 表名 set 字段=新值,字段=新值
【where 條件】
修改多表語(yǔ)法:
update 表1 別名1,表2 別名2
set 字段=新值,字段=新值
where 連接條件
and 篩選條件
刪除
方式1:delete語(yǔ)句
單表的刪除:
delete from 表名 【where 篩選條件】
多表的刪除:
delete 別名1沦寂,別名2
from 表1 別名1学密,表2 別名2
where 連接條件
and 篩選條件;
方式2:truncate語(yǔ)句
truncate table 表名
兩種方式的區(qū)別【面試題】
#1.truncate不能加where條件,而delete可以加where條件
#2.truncate的效率高一丟丟
#3.truncate 刪除帶自增長(zhǎng)的列的表后传藏,如果再插入數(shù)據(jù)腻暮,數(shù)據(jù)從1開(kāi)始
#delete 刪除帶自增長(zhǎng)列的表后,如果再插入數(shù)據(jù)毯侦,數(shù)據(jù)從上一次的斷點(diǎn)處開(kāi)始
#4.truncate刪除不能回滾哭靖,delete刪除可以回滾
DDL語(yǔ)句
庫(kù)和表的管理
庫(kù)的管理:
一、創(chuàng)建庫(kù)
create database 庫(kù)名
二侈离、刪除庫(kù)
drop database 庫(kù)名
表的管理:
#1.創(chuàng)建表
CREATE TABLE IF NOT EXISTS stuinfo(
stuId INT,
stuName VARCHAR(20),
gender CHAR,
bornDate DATETIME
);
DESC studentinfo;
#2.修改表 alter
語(yǔ)法:ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段類型】;
#①修改字段名
ALTER TABLE studentinfo CHANGE COLUMN sex gender CHAR;
#②修改表名
ALTER TABLE stuinfo RENAME [TO] studentinfo;
#③修改字段類型和列級(jí)約束
ALTER TABLE studentinfo MODIFY COLUMN borndate DATE ;
#④添加字段
ALTER TABLE studentinfo ADD COLUMN email VARCHAR(20) first;
#⑤刪除字段
ALTER TABLE studentinfo DROP COLUMN email;
#3.刪除表
DROP TABLE [IF EXISTS] studentinfo;
常見(jiàn)類型
整型:
小數(shù):
浮點(diǎn)型
定點(diǎn)型
字符型:
日期型:
Blob類型:
常見(jiàn)約束
NOT NULL
DEFAULT
UNIQUE
CHECK
PRIMARY KEY
FOREIGN KEY
數(shù)據(jù)庫(kù)事務(wù)
含義
通過(guò)一組邏輯操作單元(一組DML——sql語(yǔ)句)试幽,將數(shù)據(jù)從一種狀態(tài)切換到另外一種狀態(tài)
特點(diǎn)
(ACID)
原子性:要么都執(zhí)行,要么都回滾
一致性:保證數(shù)據(jù)的狀態(tài)操作前和操作后保持一致
隔離性:多個(gè)事務(wù)同時(shí)操作相同數(shù)據(jù)庫(kù)的同一個(gè)數(shù)據(jù)時(shí)卦碾,一個(gè)事務(wù)的執(zhí)行不受另外一個(gè)事務(wù)的干擾
持久性:一個(gè)事務(wù)一旦提交铺坞,則數(shù)據(jù)將持久化到本地,除非其他事務(wù)對(duì)其進(jìn)行修改
相關(guān)步驟:
1洲胖、開(kāi)啟事務(wù)
2济榨、編寫事務(wù)的一組邏輯操作單元(多條sql語(yǔ)句)
3、提交事務(wù)或回滾事務(wù)
事務(wù)的分類:
隱式事務(wù)绿映,沒(méi)有明顯的開(kāi)啟和結(jié)束事務(wù)的標(biāo)志
比如
insert腿短、update、delete語(yǔ)句本身就是一個(gè)事務(wù)
顯式事務(wù)绘梦,具有明顯的開(kāi)啟和結(jié)束事務(wù)的標(biāo)志
1橘忱、開(kāi)啟事務(wù)
取消自動(dòng)提交事務(wù)的功能
2、編寫事務(wù)的一組邏輯操作單元(多條sql語(yǔ)句)
insert
update
delete
3卸奉、提交事務(wù)或回滾事務(wù)
使用到的關(guān)鍵字
set autocommit=0;
start transaction;
commit;
rollback;
savepoint 斷點(diǎn)
commit to 斷點(diǎn)
rollback to 斷點(diǎn)
事務(wù)的隔離級(jí)別:
事務(wù)并發(fā)問(wèn)題如何發(fā)生钝诚?
當(dāng)多個(gè)事務(wù)同時(shí)操作同一個(gè)數(shù)據(jù)庫(kù)的相同數(shù)據(jù)時(shí)
事務(wù)的并發(fā)問(wèn)題有哪些?
臟讀:一個(gè)事務(wù)讀取到了另外一個(gè)事務(wù)未提交的數(shù)據(jù)
不可重復(fù)讀:同一個(gè)事務(wù)中榄棵,多次讀取到的數(shù)據(jù)不一致
幻讀:一個(gè)事務(wù)讀取數(shù)據(jù)時(shí)凝颇,另外一個(gè)事務(wù)進(jìn)行更新,導(dǎo)致第一個(gè)事務(wù)讀取到了沒(méi)有更新的數(shù)據(jù)
如何避免事務(wù)的并發(fā)問(wèn)題疹鳄?
通過(guò)設(shè)置事務(wù)的隔離級(jí)別
1拧略、READ UNCOMMITTED
2、READ COMMITTED 可以避免臟讀
3瘪弓、REPEATABLE READ 可以避免臟讀垫蛆、不可重復(fù)讀和一部分幻讀
4、SERIALIZABLE可以避免臟讀、不可重復(fù)讀和幻讀
設(shè)置隔離級(jí)別:
set session|global transaction isolation level 隔離級(jí)別名;
查看隔離級(jí)別:
select @@tx_isolation;
視圖
含義:理解成一張?zhí)摂M的表
視圖和表的區(qū)別:
使用方式 占用物理空間
視圖 完全相同 不占用袱饭,僅僅保存的是sql邏輯
表 完全相同 占用
視圖的好處:
1川无、sql語(yǔ)句提高重用性,效率高
2虑乖、和表實(shí)現(xiàn)了分離懦趋,提高了安全性
視圖的創(chuàng)建
語(yǔ)法:
CREATE VIEW 視圖名
AS
查詢語(yǔ)句;
視圖的增刪改查
1、查看視圖的數(shù)據(jù)
SELECT * FROM my_v4;
SELECT * FROM my_v1 WHERE last_name='Partners';
2疹味、插入視圖的數(shù)據(jù)
INSERT INTO my_v4(last_name,department_id) VALUES('虛竹',90);
3仅叫、修改視圖的數(shù)據(jù)
UPDATE my_v4 SET last_name ='夢(mèng)姑' WHERE last_name='虛竹';
4、刪除視圖的數(shù)據(jù)
DELETE FROM my_v4;
某些視圖不能更新
包含以下關(guān)鍵字的sql語(yǔ)句:分組函數(shù)糙捺、distinct惑芭、group by、having继找、union或者union all
常量視圖
Select中包含子查詢
join
from一個(gè)不能更新的視圖
where子句的子查詢引用了from子句中的表
視圖邏輯的更新
#方式一:
CREATE OR REPLACE VIEW test_v7
AS
SELECT last_name FROM employees
WHERE employee_id>100;
#方式二:
ALTER VIEW test_v7
AS
SELECT employee_id FROM employees;
SELECT * FROM test_v7;
視圖的刪除
DROP VIEW test_v1,test_v2,test_v3;
視圖結(jié)構(gòu)的查看
DESC test_v7;
SHOW CREATE VIEW test_v7;
存儲(chǔ)過(guò)程
含義:一組經(jīng)過(guò)預(yù)先編譯的sql語(yǔ)句的集合
好處:
1遂跟、提高了sql語(yǔ)句的重用性,減少了開(kāi)發(fā)程序員的壓力
2婴渡、提高了效率
3幻锁、減少了傳輸次數(shù)
分類:
1、無(wú)返回?zé)o參
2边臼、僅僅帶in類型哄尔,無(wú)返回有參
3、僅僅帶out類型柠并,有返回?zé)o參
4岭接、既帶in又帶out,有返回有參
5臼予、帶inout鸣戴,有返回有參
注意:in、out粘拾、inout都可以在一個(gè)存儲(chǔ)過(guò)程中帶多個(gè)
創(chuàng)建存儲(chǔ)過(guò)程
語(yǔ)法:
create procedure 存儲(chǔ)過(guò)程名(in|out|inout 參數(shù)名 參數(shù)類型,...)
begin
存儲(chǔ)過(guò)程體
end
類似于方法:
修飾符 返回類型 方法名(參數(shù)類型 參數(shù)名,...){
方法體;
}
注意
1窄锅、需要設(shè)置新的結(jié)束標(biāo)記
delimiter 新的結(jié)束標(biāo)記
示例:
delimiter $
CREATE PROCEDURE 存儲(chǔ)過(guò)程名(IN|OUT|INOUT 參數(shù)名 參數(shù)類型,...)
BEGIN
sql語(yǔ)句1;
sql語(yǔ)句2;
END $
2、存儲(chǔ)過(guò)程體中可以有多條sql語(yǔ)句缰雇,如果僅僅一條sql語(yǔ)句入偷,則可以省略begin end
3、參數(shù)前面的符號(hào)的意思
in:該參數(shù)只能作為輸入 (該參數(shù)不能做返回值)
out:該參數(shù)只能作為輸出(該參數(shù)只能做返回值)
inout:既能做輸入又能做輸出
調(diào)用存儲(chǔ)過(guò)程
call 存儲(chǔ)過(guò)程名(實(shí)參列表)
函數(shù)
創(chuàng)建函數(shù)
學(xué)過(guò)的函數(shù):LENGTH械哟、SUBSTR疏之、CONCAT等
語(yǔ)法:
CREATE FUNCTION 函數(shù)名(參數(shù)名 參數(shù)類型,...) RETURNS 返回類型
BEGIN
函數(shù)體
END
調(diào)用函數(shù)
SELECT 函數(shù)名(實(shí)參列表)
函數(shù)和存儲(chǔ)過(guò)程的區(qū)別
關(guān)鍵字 調(diào)用語(yǔ)法 返回值 應(yīng)用場(chǎng)景
函數(shù) FUNCTION SELECT 函數(shù)() 只能是一個(gè) 一般用于查詢結(jié)果為一個(gè)值并返回時(shí),當(dāng)有返回值而且僅僅一個(gè)
存儲(chǔ)過(guò)程 PROCEDURE CALL 存儲(chǔ)過(guò)程() 可以有0個(gè)或多個(gè) 一般用于更新
流程控制結(jié)構(gòu)
系統(tǒng)變量
一暇咆、全局變量
作用域:針對(duì)于所有會(huì)話(連接)有效锋爪,但不能跨重啟
查看所有全局變量
SHOW GLOBAL VARIABLES;
查看滿足條件的部分系統(tǒng)變量
SHOW GLOBAL VARIABLES LIKE '%char%';
查看指定的系統(tǒng)變量的值
SELECT @@global.autocommit;
為某個(gè)系統(tǒng)變量賦值
SET @@global.autocommit=0;
SET GLOBAL autocommit=0;
二丙曙、會(huì)話變量
作用域:針對(duì)于當(dāng)前會(huì)話(連接)有效
查看所有會(huì)話變量
SHOW SESSION VARIABLES;
查看滿足條件的部分會(huì)話變量
SHOW SESSION VARIABLES LIKE '%char%';
查看指定的會(huì)話變量的值
SELECT @@autocommit;
SELECT @@session.tx_isolation;
為某個(gè)會(huì)話變量賦值
SET @@session.tx_isolation='read-uncommitted';
SET SESSION tx_isolation='read-committed';
自定義變量
一、用戶變量
聲明并初始化:
SET @變量名=值;
SET @變量名:=值;
SELECT @變量名:=值;
賦值:
方式一:一般用于賦簡(jiǎn)單的值
SET 變量名=值;
SET 變量名:=值;
SELECT 變量名:=值;
方式二:一般用于賦表 中的字段值
SELECT 字段名或表達(dá)式 INTO 變量
FROM 表;
使用:
select @變量名;
二几缭、局部變量
聲明:
declare 變量名 類型 【default 值】;
賦值:
方式一:一般用于賦簡(jiǎn)單的值
SET 變量名=值;
SET 變量名:=值;
SELECT 變量名:=值;
方式二:一般用于賦表 中的字段值
SELECT 字段名或表達(dá)式 INTO 變量
FROM 表;
使用:
select 變量名
二者的區(qū)別:
作用域 定義位置 語(yǔ)法
用戶變量 當(dāng)前會(huì)話 會(huì)話的任何地方 加@符號(hào)河泳,不用指定類型
局部變量 定義它的BEGIN END中 BEGIN END的第一句話 一般不用加@,需要指定類型
分支
一沃呢、if函數(shù)
語(yǔ)法:if(條件年栓,值1,值2)
特點(diǎn):可以用在任何位置
二薄霜、case語(yǔ)句
語(yǔ)法:
情況一:類似于switch
case 表達(dá)式
when 值1 then 結(jié)果1或語(yǔ)句1(如果是語(yǔ)句某抓,需要加分號(hào))
when 值2 then 結(jié)果2或語(yǔ)句2(如果是語(yǔ)句,需要加分號(hào))
...
else 結(jié)果n或語(yǔ)句n(如果是語(yǔ)句惰瓜,需要加分號(hào))
end 【case】(如果是放在begin end中需要加上case否副,如果放在select后面不需要)
情況二:類似于多重if
case
when 條件1 then 結(jié)果1或語(yǔ)句1(如果是語(yǔ)句,需要加分號(hào))
when 條件2 then 結(jié)果2或語(yǔ)句2(如果是語(yǔ)句崎坊,需要加分號(hào))
...
else 結(jié)果n或語(yǔ)句n(如果是語(yǔ)句备禀,需要加分號(hào))
end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)
特點(diǎn):
可以用在任何位置
三奈揍、if elseif語(yǔ)句
語(yǔ)法:
if 情況1 then 語(yǔ)句1;
elseif 情況2 then 語(yǔ)句2;
...
else 語(yǔ)句n;
end if;
特點(diǎn):
只能用在begin end中G!D泻病A砘肌!6暌铩@セ!W夤凇E籼取!M绲5诠伞!话原!
三者比較:
應(yīng)用場(chǎng)合
if函數(shù) 簡(jiǎn)單雙分支
case結(jié)構(gòu) 等值判斷 的多分支
if結(jié)構(gòu) 區(qū)間判斷 的多分支
循環(huán)
語(yǔ)法:
【標(biāo)簽:】WHILE 循環(huán)條件 DO
循環(huán)體
END WHILE 【標(biāo)簽】;
特點(diǎn):
只能放在BEGIN END里面
如果要搭配leave跳轉(zhuǎn)語(yǔ)句夕吻,需要使用標(biāo)簽,否則可以不用標(biāo)簽
leave類似于java中的break語(yǔ)句繁仁,跳出所在循環(huán)I嫦凇!黄虱!