寫存儲(chǔ)過程函數(shù)(如function cleanTable),在函數(shù)中寫50條delete語句,或者在函數(shù)中弄個(gè)循環(huán)都可以。然后在客戶端執(zhí)行call cleanTable()就可以了。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、廣安網(wǎng)站維護(hù)、網(wǎng)站推廣。
本期我們用 MySQL 提供的 DBUG 工具來研究 MySQL 的 SQL 處理流程。
起手先造個(gè)實(shí)例
這里得稍微改一下實(shí)例的啟動(dòng)文件 start,將 CUSTOM_MYSQLD 改為 mysqld-debug:
重啟一下實(shí)例,加上 debug 參數(shù):
我們來做一兩個(gè)實(shí)驗(yàn),說明 DBUG 包的作用:
先設(shè)置一個(gè)簡(jiǎn)單的調(diào)試規(guī)則,我們?cè)O(shè)置了兩個(gè)調(diào)試選項(xiàng):
d:開啟各個(gè)調(diào)試點(diǎn)的輸出
O,/tmp/mysqld.trace:將調(diào)試結(jié)果輸出到指定文件
請(qǐng)點(diǎn)擊輸入圖片描述
然后我們創(chuàng)建了一張表,來看一下調(diào)試的輸出結(jié)果:
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到 create table 的過程中,MySQL 的一些細(xì)節(jié)操作,比如分配內(nèi)存 alloc_root 等
這樣看還不夠直觀,我們?cè)黾右恍┬畔ⅲ?/p>
請(qǐng)點(diǎn)擊輸入圖片描述
來看看效果:
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到輸出變成了調(diào)用樹的形式,現(xiàn)在就可以分辨出 alloc_root 分配的內(nèi)存,是為了解析 SQL 時(shí)用的(mysql_parse)
我們?cè)僭黾右恍┯杏玫男畔ⅲ?/p>
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到結(jié)果中增加了文件名和行號(hào):
請(qǐng)點(diǎn)擊輸入圖片描述
現(xiàn)在我們可以在輸出中找一下統(tǒng)計(jì)表相關(guān)的信息:
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到 MySQL 在這里非常機(jī)智,直接執(zhí)行了一個(gè)內(nèi)置的存儲(chǔ)過程來更新統(tǒng)計(jì)表。
沿著 que_eval_sql,可以找到其他類似的統(tǒng)計(jì)表,比如下面這些:
請(qǐng)點(diǎn)擊輸入圖片描述
請(qǐng)點(diǎn)擊輸入圖片描述
本次實(shí)驗(yàn)中,我們借助了 MySQL 的 DBUG 包,來讓 MySQL 將處理過程暴露出來。MySQL 中類似的技術(shù)還有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。
這些技術(shù)將 MySQL 的不同方向的信息暴露出來,方便大家理解其中機(jī)制。
建議采用聯(lián)合查詢 join 而且使用全連接(FULL JOIN)方式
select *
from web_pian
FULL JOIN Orders
ON web_pian.mingcheng=web_shang.mingcheng
Order by web_pian.mingcheng
解釋下:FULL Join 全連接將會(huì)輸出所有的記錄,即使有些空缺,和Left Join 左連接有所不同
要點(diǎn):left
join,right
join,inner
join
首先有如下兩個(gè)表:
student:
id(int)
name(nvarchar)
1
a
2
b
3
c
4
d
5
e
6
f
quiz:
id(int)
score(int)
1
60
2
70
4
80
6
90
8
100
9
30
內(nèi)連接:(inner
join)包括連接表的匹配行
select
student.name,quiz.score
from
quiz
inner
join
student
on
student.id=quiz.id
name
score
a
60
b
70
d
80
f
90
左連接:(left
join)包括連接表匹配行以及左連接表的所有行
select
student.name,quiz.score
from
student
left
join
quiz
on
student.id=quiz.id
name
score
a
60
b
70
c
null
d
80
e
null
f
90
右連接:(right
join)結(jié)果包括連接表的匹配行以及右連接表的所有行
select
student.name,quiz.score
from
student
right
join
quiz
on
student.id=quiz.id
name
score
a
60
b
70
d
80
f
90
null
100
null
30
當(dāng)然,也可以看出左連接也可以寫成右連接的形式:
select
student.name,quiz.score
from
student
right
join
quiz
on
student.id=quiz.id等價(jià)于
select
student.name,quiz.score
from
quiz
left
join
student
on
student.id=quiz.id