卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

sql語言中update語句的功能是 一條更新的SQL語句是如何執(zhí)行的?

一條更新的SQL語句是如何執(zhí)行的?第一步:連接器首先你需要連接到數(shù)據(jù)庫上,你會輸入ip,端口,賬號密碼。然后根據(jù)你的賬號密碼,連接器就來驗(yàn)證你的身份了。兩種情況:1.用戶密碼不對,你就被Access

一條更新的SQL語句是如何執(zhí)行的?

第一步:連接器

首先你需要連接到數(shù)據(jù)庫上,你會輸入ip,端口,賬號密碼。然后根據(jù)你的賬號密碼,連接器就來驗(yàn)證你的身份了。

兩種情況:1.用戶密碼不對,你就被Access denied了。

2.驗(yàn)證通過,連接器就去權(quán)限表獲取這個賬戶下面的權(quán)限用于這個連接之后的權(quán)限判斷。

第二種情況的意思就是,如果這個連接還保持著,如果管理員更改了你賬戶的權(quán)限,不會影響你的賬戶。只有斷開了連接再重新連接才會有影響。而且這個連接如果你連你之后一直沒啥操作,連接器就會自動斷開連接,默認(rèn)時間是8小時。

這里有一點(diǎn)要注意:你的所有操作的臨時內(nèi)存都會保存在你這個連接里面,只有在斷開連接之后才會釋放這些內(nèi)存。所以如果長時間保持連接,并且有大內(nèi)存的操作導(dǎo)致占用內(nèi)存太多了,Mysql就會被系統(tǒng)重啟了。

所以如果有大內(nèi)存操作最好重連一下釋放臨時內(nèi)存!如果你Mysql版本是5.7或者以上的,可以通過執(zhí)行mysql_reset_connection來釋放臨時內(nèi)存。

第二步:查緩存

連接好之后如果你執(zhí)行查詢語句就會先去緩存看看,如果之前執(zhí)行過這條語句的話,會以鍵值對的形式保存在緩存中,key就是查詢語句,value就是結(jié)果,能直接返回。

聽起來好像很好,緩存了之后很舒服,但是往往利用緩存弊大于利!怎么說?

比如你對一個表查了10條語句,好了都緩存了,如果這個表的一個update語句進(jìn)來,完了。之前所有緩存都會被清空!白忙了!除非是靜態(tài)表,基本上不會有更新的那種,可以用緩存!

注意8.0版本直接把緩存咔了,沒這個功能了。

第三步:分析器

如果緩存沒中,好了就來到了分析器了,先分析下詞法,例如select這樣的關(guān)鍵字還有你的表名,列名提取出來,然后再語法分析,判斷你的語句是否滿足語法,如果不對那就給你個You have an error in your SQL syntax 是不是常見?

第四步:優(yōu)化器

分析了之后其實(shí)Mysql已經(jīng)知道你要干嘛了,但是它還是要幫你優(yōu)化一下!比如決定用哪個索引???怎么個順序連接表啊等。

舉個例子 select * from a join b on where a.t10 and b.e20

第一種情況,先從表a中找出t10的值,再根據(jù)這些id關(guān)聯(lián)表b,再判斷e是否等于20。

第二種情況,先從表b中找出e20的值,再根據(jù)這些id關(guān)聯(lián)表a,再判斷t是否等于10。

這兩種結(jié)果肯定都是一樣的,但是根據(jù)表a和表b的數(shù)據(jù)執(zhí)行效率是不一樣的,由優(yōu)化器來預(yù)估決定到底用哪種方案!優(yōu)化器就是干這事的!

第五步:執(zhí)行器

到這步就來執(zhí)行了!執(zhí)行時候來看看你有沒有這個權(quán)限,有的話就繼續(xù)執(zhí)行,沒的話,就是command denied了!

按照上面那個語句,如果用了第一種情況,那執(zhí)行流程就是:

通過存儲引擎的接口調(diào)用引擎返回表的第一行,看看t是不是10,如果是則存入結(jié)果集,如果不是則跳過。

繼續(xù)調(diào)接口取第二行直到遍歷完,

然后返回結(jié)果集給客戶端。

可能會有人覺得奇怪,為什么在第五步的時候才驗(yàn)證權(quán)限?為什么不在優(yōu)化器之前做?

因?yàn)樵谟袝rSQL語句操作的不僅僅是SQL字面上這些的,比如你搞了個觸發(fā)器,觸發(fā)器只有在執(zhí)行的時候才能確認(rèn),所以驗(yàn)證權(quán)限這步得在執(zhí)行器做,之前的做不了。

一條語句在Mysql的執(zhí)行就這樣大功告成了!

update能夠同時set多個值嗎?

能。

update能同時set更新多個字段值,例如update 表名 set 字段1值1,字段2值2,字段3值3 where id1; update是sql語句的一種,是用來更新數(shù)據(jù)庫記錄的,更新的多個字段列之間用英文逗號隔開。

更新操作一般要帶where條件,防止誤更新了全表記錄。