mysql高階 三 游標簡易教程

2021-08-16 22:34:13 字數 2533 閱讀 5343

從mysql v5.5

開始,進行了一次大的改變,就是將

innodb

作為預設的儲存引擎。

innodb

支援事務,而且擁有相關的

rdbms

特性:acid

事務支援,資料完整性(支援外來鍵),災難恢復能力等等。

現在簡單總結一下游標的知識。

游標簡單來說就是查詢出來的資料索引,通過對游標的操作(第乙個位置、最後乙個位置、上乙個位置、下乙個位置)可以遍歷出資料。

使用游標(cursor)

的乙個主要的原因就是把集合操作轉換成單個記錄處理方式。用

sql語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是乙個含有多個記錄的集合。游標機制允許使用者在

sql server

內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄。

在資料庫中,游標是乙個十分重要的概念。游標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標總是與一條sql 

選擇語句相關聯

,因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須宣告乙個指向該結果集的游標。如果曾經用 c 

語言寫過對檔案進行處理的程式,那麼游標就像您開啟檔案所得到的檔案控制代碼一樣,只要檔案開啟成功,該檔案控制代碼就可代表該檔案。對於游標而言,其道理是相同的。可見光標能夠實現按與傳統程式讀取平面檔案類似的方式處理來自基礎表的結果集,從而把表中資料以平面檔案的形式呈現給程式。

我們知道關聯式資料庫管理系統實質是面向集合的,在ms sql server 

中並沒有一種描述表中單一記錄的表達形式,除非使用

where 

子句來限制只有一條記錄被選中。因此我們必須借助於游標來進行面向單條記錄的資料處理。由此可見,游標允許應用程式對查詢語句

select 

返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基於游標位置而對錶中資料進行刪除或更新的能力;而且,正是游標把作為面向集合的資料庫管理系統和面向行的程式設計兩者聯絡起來,使兩個資料處理方式能夠進行溝通。 

在資料庫開發過程中,當你檢索的資料只是一條記錄時,你所編寫的事務語句**往往使用select insert 

語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案——那就是使用游標

就是乙個可讀的標識,用來標識資料取到什麼地方了。

1,唯讀

2,不滾動

3,不敏感的

需要強調的是,游標必須在定義處理程式之前被定義,但變數必須在定義游標之前被定義,順序就是變數定義-

游標定義

-處理程式。

declare cursor_name cursor for select_statement

這個語句宣告乙個游標。也可以在子程式中定義多個游標,乙個塊中的每乙個游標必須命名唯一。宣告游標後也是單條操作的。

open cursor_name

這個語句開啟先前宣告的游標。

3. 游標

fetch

fetch cursor_name into var_name [, var_name] ...

這個語句用指定的開啟游標讀取下一行(如果有下一行的話),並且前進游標指標至該行。

close cursor_name

這個語句關閉先前開啟的游標,注意,用完後必須關閉。

下面是乙個儲存過程,裡面用到游標,逐條更新資料(批量更新資料)

begin

declare  no_more_record int default 0;

declare  pid bigint(20);

declare  pvalue decimal(15,5);

declare  cur_record cursor for   select cola, colb from tableabc;  /*首先這裡對游標進行定義

*/declare  continue handler for not found  set  no_more_record = 1; /*這個是個條件處理,針對

not found

的條件,

當沒有記錄時賦值為

1*/open  cur_record; /*接著使用

open

開啟游標

*/fetch  cur_record into pid, pvalue; /*把第一行資料寫入變數中

,游標也隨之指向了記錄的第一行

*/while no_more_record != 1 do

insert  into testtable(id, value)

values  (pid, pvalue);

fetch  cur_record into pid, pvalue;

end while;

close  cur_record;  /*用完後記得用

close

把資源釋放掉

*/end

mysql游標教程 MySql游標的使用例項

mysql游標使用的整個過程為 1.建立游標 declare calc bonus cursor for select id,salary,commission from employees 2.開啟游標 open calc bonus 3.使用游標 fetch calc bonus into re...

mysql高階教程

trace分析器執行計畫 mysql5.6提供了對sql的跟蹤trace,通過trace為了見能夠進一步了解為什麼優化器選擇a計畫,而不是選擇b 計畫,開啟trace,設定格式我json,並設定trace最大能夠使用的記憶體大小,避免解析過程中因為預設記憶體小二不能夠完整展示。set optimiz...

EV3 三光感巡線簡易實現原理

讀取三個光感的黑白範圍 前文有光感校對示例原理 rd max 1 rd max 2 rd max 3 rd min 1 rd min 2 rd min 3 每個的中值 rd zz 1 rd zz 2 rd zz 3 rd zz rd max rd min 2 rd min 讀感測器當前實際值 rd ...