最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
mysql怎么執(zhí)行sql mysql怎么執(zhí)行sql語句腳本

MySql中Sql的執(zhí)行過程

如果查詢緩存沒有命中,那么SQL請求會進(jìn)入分析器,分析器是用來分辨SQL語句的執(zhí)行目的,其執(zhí)行過程大致分為兩步:

十載的香坊網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整香坊建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“香坊網(wǎng)站設(shè)計(jì)”,“香坊網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

表1 語法分析關(guān)鍵字然后再通過語法規(guī)則解析,判斷輸入的SQL 語句是否滿足MySQL語法,并且生成圖5的語法樹。由SQL語句生成的四個(gè)單詞中,識別出兩個(gè)關(guān)鍵字,分別是select 和from。根據(jù)MySQL的語法Select 和 from之間對應(yīng)的是fields 字段,下面應(yīng)該掛接username;在from后面跟隨的是Tables字段,其下掛接的是userinfo。

優(yōu)化器的作用是對SQL進(jìn)行優(yōu)化,生成最有的執(zhí)行方案。如圖6所示,前面提到的SQL解析器通過語法分析和語法規(guī)則生成了SQL語法樹。這個(gè)語法樹作為優(yōu)化器的輸入,而優(yōu)化器(黃色的部分)包含了邏輯變換和代價(jià)優(yōu)化兩部分的內(nèi)容。在優(yōu)化完成以后會生成SQL執(zhí)行計(jì)劃作為整個(gè)優(yōu)化過程的輸出,交給執(zhí)行器在存儲引擎上執(zhí)行。

所處的位置如上圖所示,這節(jié)的重點(diǎn)在優(yōu)化器中的邏輯變換和代價(jià)優(yōu)化上。

邏輯變換也就是在關(guān)系代數(shù)基礎(chǔ)上進(jìn)行變換,其目的是為了化簡,同時(shí)保證SQL變化前后的結(jié)果一致,也就是邏輯變化并不會帶來結(jié)果集的變化。其主要包括以下幾個(gè)方面:

這樣講概念或許有些抽象,通過圖7 來看看邏輯變化如何在SQL中執(zhí)行的吧。

如圖7所示,從上往下共有4個(gè)步驟:

1. 針對存在的SQL語句,首先通過“否定消除”,去掉條件判斷中的“NOT”。語句由原來的“or”轉(zhuǎn)換成“and”,并且大于小于符號進(jìn)行變號。藍(lán)色部分為修改前的SQL,紅色是修改以后的SQL。2. 等值傳遞,這一步很好理解分別降”t2.a=9” 和”t2.b=5”分別替換掉SQL中對應(yīng)的值。3. 接下來就是常量表達(dá)式計(jì)算,將“5+7”計(jì)算得到“12”。4. 最后是常量表達(dá)式計(jì)算后的化簡,將”9=10”化簡為”true”帶入到最終的SQL表達(dá)式中完成優(yōu)化。

代價(jià)優(yōu)化是用來確定每個(gè)表,根據(jù)條件是否應(yīng)用索引,應(yīng)用哪個(gè)索引和確定多表連接的順序等問題。為了完成代價(jià)優(yōu)化,需要找到一個(gè)代價(jià)最小的方案。因此,優(yōu)化器是通過基于代價(jià)的計(jì)算方法來決定如何執(zhí)行查詢的(Cost-based Optimization)。簡化的過程如下:

這里將配置操作的代價(jià)分為MySQL 服務(wù)層和MySQL 引擎層,MySQL 服務(wù)層主要是定義CPU的代價(jià),而MySQL 引擎層主要定義IO代價(jià)。MySQL 5.7 引入了兩個(gè)系統(tǒng)表mysql.server_cost和mysql.engine_cost來分別配置這兩個(gè)層的代價(jià)。如下:MySQL 服務(wù)層代價(jià)保存在表server_cost中,其具體內(nèi)容如下:

由上可以看出創(chuàng)建臨時(shí)表的代價(jià)是很高的,尤其是內(nèi)部的myisam或innodb臨時(shí)表。MySQL 引擎層代價(jià)保存在表engine_cost中,其具體內(nèi)容如下:

目前io_block_read_cost和memory_block_read_cost默認(rèn)值均為1,實(shí)際生產(chǎn)中建議酌情調(diào)大memory_block_read_cost,特別是對普通硬盤的場景。MySQL會根據(jù)SQL查詢生成的查詢計(jì)劃中對應(yīng)的操作從上面兩張代價(jià)表中查找對應(yīng)的代價(jià)值,并且進(jìn)行累加形成最終執(zhí)行SQL計(jì)劃的代價(jià)。再將多種可能的執(zhí)行計(jì)劃進(jìn)行比較,選取最小代價(jià)的計(jì)劃執(zhí)行。

當(dāng)分析器生成查詢計(jì)劃,并且經(jīng)過優(yōu)化器以后,就到了執(zhí)行器。執(zhí)行器會選擇執(zhí)行計(jì)劃開始執(zhí)行,但在執(zhí)行之前會校驗(yàn)請求用戶是否擁有查詢的權(quán)限,如果沒有權(quán)限,就會返回錯(cuò)誤信息,否則將會去調(diào)用MySQL引擎層的接口,執(zhí)行對應(yīng)的SQL語句并且返回結(jié)果。例如SQL:“SELECT * FROM userinfo WHERE username = 'Tom';“假設(shè) “username“ 字段沒有設(shè)置索引,就會調(diào)用存儲引擎從第一條開始查,如果碰到了用戶名字是” Tom“, 就將結(jié)果集返回,沒有查找到就查看下一行,重復(fù)上一步的操作,直到讀完整個(gè)表或者找到對應(yīng)的記錄。需要注意SQL語句的執(zhí)行順序并不是按照書寫順序來的,順序的定義會在分析器中做好,一般是按照如下順序:

如果命中的記錄比較多,應(yīng)用會從MySql Server一批批獲取數(shù)據(jù)

本文從MySQL中SQL語句的執(zhí)行過程作為切入點(diǎn),首先介紹了查詢請求的執(zhí)行流程,其中將MySQL的處理分為MySQL Server層和MySQL存儲引擎層。通過介紹SQL語句的流轉(zhuǎn),引出了后面要介紹的5大組件,他們分別是:連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器。后面的內(nèi)容中對每個(gè)組件進(jìn)行了詳細(xì)的介紹。連接器,負(fù)責(zé)身份認(rèn)證和權(quán)限鑒別;查詢緩存,將查詢的結(jié)果集進(jìn)行緩存,提高查詢效率;分析器,對SQL語句執(zhí)行語法分析和語法規(guī)則,生成語法樹和執(zhí)行計(jì)劃;優(yōu)化器,包括邏輯變換和代價(jià)優(yōu)化;執(zhí)行器,在檢查用戶權(quán)限以后對數(shù)據(jù)進(jìn)行逐條查詢,整個(gè)過程遵守SQL語句的執(zhí)行順序。

mysql如何執(zhí)行sql腳本文件

右鍵以文本文件的形式打開,里面是記錄著可以在mysql里面執(zhí)行的代碼。

要執(zhí)行sql文件里面的代碼,需要打開mysql數(shù)據(jù)庫去執(zhí)行,新手推薦用軟件的形式執(zhí)行此sql,軟件如navicat,sqlyog等。

打開軟件并且配置連接數(shù)據(jù)庫的信息后打開,然后創(chuàng)建一個(gè)數(shù)據(jù)庫,之后右鍵數(shù)據(jù)庫選中執(zhí)行sql,接著選擇要執(zhí)行的sql文件,按提示一步一步走下去即可。

老手推薦使用cmd指令來執(zhí)行sql,因?yàn)樗俣缺容^快,首先也是連接上數(shù)據(jù)庫,創(chuàng)建并選擇好數(shù)據(jù)庫:

mysqluse

數(shù)據(jù)庫名;

mysqlset

names

utf8;

--設(shè)置傳輸編碼,避免中文亂碼

mysqlsource

d:/xxx.sql;

--

source

文件路徑

就這么簡單,

然后就等著sql執(zhí)行完畢即可.

mysql 怎么執(zhí)行sql文件

右鍵以文本文件的形式打開,里面是記錄著可以在mysql里面執(zhí)行的代碼。

要執(zhí)行sql文件里面的代碼,需要打開mysql數(shù)據(jù)庫去執(zhí)行,新手推薦用軟件的形式執(zhí)行此sql,軟件如navicat,sqlyog等。

打開軟件并且配置連接數(shù)據(jù)庫的信息后打開,然后創(chuàng)建一個(gè)數(shù)據(jù)庫,之后右鍵數(shù)據(jù)庫選中執(zhí)行sql,接著選擇要執(zhí)行的sql文件,按提示一步一步走下去即可。

老手推薦使用cmd指令來執(zhí)行sql,因?yàn)樗俣缺容^快,首先也是連接上數(shù)據(jù)庫,創(chuàng)建并選擇好數(shù)據(jù)庫:

mysqluse 數(shù)據(jù)庫名;

mysqlset names utf8; --設(shè)置傳輸編碼,避免中文亂碼

mysqlsource d:/xxx.sql; -- source 文件路徑

就這么簡單, 然后就等著sql執(zhí)行完畢即可.

mysql根據(jù)條件執(zhí)行sql

在項(xiàng)目開發(fā)中,我們常常會用到根據(jù)不同條件,執(zhí)行不同的sql,在mysql中可以用 IF(expr1,expr2,expr3) 來滿足這個(gè)需求。下面我給大家一個(gè)示例:

示例1:sql比較復(fù)雜

SELECT

if(dom.PLAN_NO is null,

(ifnull( ( SELECT sum( DELIVERY_QTY ) FROM delivery_order_materiel WHERE 1=1 and PO_NO=pom.PO_NO and MATERIEL_CODE = pom.MATERIEL_CODE ), 0 )),

ifnull( ( SELECT sum( DELIVERY_QTY ) FROM delivery_order_materiel WHERE POM_PM_CODE = pom.PM_CODE AND PLAN_NO = dpm.PLAN_NO ), 0 )

)AS tempFiled

from tableName

where 1=1

示例2:

SELECT

if(dom.PLAN_NO=1,

( SELECT sum( DELIVERY_QTY ) FROM delivery_order_materiel WHERE 1=1 and PO_NO=pom.PO_NO and MATERIEL_CODE = pom.MATERIEL_CODE ),

( SELECT sum( DELIVERY_QTY ) FROM delivery_order WHERE 1=1 AND PLAN_NO = dpm.PLAN_NO )

)AS tempFiled

from tableName

where 1=1

如何用mysql執(zhí)行sql文件

第一種方法:

在命令行下(未連接數(shù)據(jù)庫),輸入 mysql -h localhost -u root -p123456 F:\hello world\test.sql 回車即可.

第二種方法:

在命令行下(已連接數(shù)據(jù)庫,此時(shí)的提示符為 mysql ),輸入 source F:\hello world\test.sql 或者 \. F:\hello world\test.sql 回車即可

mysql 怎么導(dǎo)入/執(zhí)行.SQL(存儲過程)文件?

方法一 進(jìn)入命令行

mysql –u用戶名 –p密碼 –D數(shù)據(jù)庫【sql腳本文件路徑全名】,示例:

mysql –uroot –p123456 -Dtest /home/zj/create_table.sql

注意:

如果在sql腳本文件中使用了use 數(shù)據(jù)庫,則-D數(shù)據(jù)庫選項(xiàng)可以忽略

方法二 進(jìn)入mysql的控制臺后,使用source命令執(zhí)行

Mysqlsource 【sql腳本文件的路徑全名】 或 Mysql\. 【sql腳本文件的路徑全名】,示例:

source /home/zj/create_table.sql


網(wǎng)站欄目:mysql怎么執(zhí)行sql mysql怎么執(zhí)行sql語句腳本
網(wǎng)站URL:http://fisionsoft.com.cn/article/hjdodj.html