Mysql系列第十八講 遊標詳解
準備資料
建立庫:javacode2018
建立表:test1、test2、test3
遊標定義
遊標(Cursor)是處理資料的一種方法,為了檢視或者處理結果集中的資料,遊標提供了在結果集中一次一行遍歷資料的能力。
遊標只能在儲存過程和函式中使用。
遊標的作用
如sql:
上面這個查詢返回了test1中的資料,如果我們想對這些資料進行遍歷處理,此時我們就可以使用遊標來進行操作。
遊標相當於一個指標,這個指標指向select的第一行資料,可以透過移動指標來遍歷後面的資料。
遊標的使用步驟
-
宣告遊標:這個過程只是建立了一個遊標,需要指定這個遊標需要遍歷的select查詢,宣告遊標時並不會去執行這個sql。
-
開啟遊標:開啟遊標的時候,會執行遊標對應的select語句。
-
遍歷資料:使用遊標迴圈遍歷select結果中每一行資料,然後進行處理。
-
關閉遊標:遊標使用完之後一定要關閉。
遊標語法
宣告遊標
一個begin end中只能宣告一個遊標。
開啟遊標
遍歷遊標
取出當前行的結果,將結果放在對應的變數中,並將遊標指標指向下一行的資料。
當呼叫fetch的時候,會獲取當前行的資料,如果當前行無資料,會引發mysql內部的NOT FOUND錯誤。
關閉遊標
遊標使用完畢之後一定要關閉。
單遊標示例
寫一個函式,計算test1表中a、b欄位所有的和。
建立函式:
上面語句執行過程中可能有問題,解決方式如下。 changchun/
錯誤資訊:Mysql 建立函式出現This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary
mysql的設定預設是不允許建立函式
解決辦法1:
執行: xinyang/
SET GLOBAL log_bin_trust_function_creators = 1;
不過 重啟了 就失效了
注意:有主從複製的時候 從機必須要設定 不然會導致主從同步失敗
解決辦法2:
在my.cnf裡面設定
log-bin-trust-function-creators=1
不過這個需要重啟服務
見效果:
遊標過程詳解
以上面的示例程式碼為例,我們們來看一下游標的詳細執行過程。
遊標中有個指標,當開啟遊標的時候,才會執行遊標對應的select語句,這個指標會指向select結果中第一行記錄。
當呼叫fetch 遊標名稱時,會獲取當前行的資料,如果當前行無資料,會觸發NOT FOUND異常。
當觸發NOT FOUND異常的時候,我們可以使用一個變數來標記一下,如下程式碼:
當遊標無資料觸發NOT FOUND異常的時候,將變數v_down的值置為TURE,迴圈中就可以透過v_down的值控制迴圈的退出。
如果當前行有資料,則將當前行資料存到對應的變數中,並將遊標指標指向下一行資料,如下語句:
巢狀遊標
寫個儲存過程,遍歷test2、test3,將test2中的a欄位和test3中的b欄位任意組合,插入到test1表中。
建立儲存過程:
見效果:
成功插入了9條資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2726008/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql系列第十五講 事務詳解MySql
- Mysql系列第十六講 變數詳解MySql變數
- Mysql系列第十四講 檢視詳解MySql
- Mysql系列第二講 詳解mysql資料型別(重點)MySql資料型別
- Mysql系列第二十一講 mysql索引原理詳解MySql索引
- Mysql系列第二十二講 mysql索引管理詳解MySql索引
- Mysql系列第九講 分組查詢詳解(group by & having)MySql
- 指標的詳細講解指標
- Mysql系列第十講 常用的幾十個函式詳解MySql函式
- Mysql系列第十九講 異常捕獲及處理詳解MySql
- Mysql系列第八講 詳解排序和分頁(order by & limit)及存在的坑MySql排序MIT
- Spring系列第四講 xml中bean定義詳解SpringXMLBean
- MySQL中的索引詳講MySql索引
- Jmeter系列(6)- test plan測試計劃詳細講解JMeter
- 路飛專案使用mysql資料庫詳細講解MySql資料庫
- 標頭檔案講解
- 指標詳解指標
- Mysql系列第十一講 深入瞭解連線查詢及原理MySql
- dart類詳細講解Dart
- 雲原生遊戲第 2 講:OpenKruiseGame 設計理念詳解遊戲UIGAM
- 【目標檢測】2萬字詳解 RCNN系列 YOLO系列 YOLOv3程式碼實現全流程詳解 pytorchCNNYOLOPyTorch
- Git應用詳解第八講:Git標籤、別名與Git gcGitGC
- MySQL varchar詳解MySql
- MySQL版本詳解MySql
- MySQL索引詳解MySql索引
- Spring系列第七講 自動注入(autowire)詳解,高手在於堅持!Spring
- Mysql系列第二十講 什麼是索引?MySql索引
- MySQL過程和遊標MySql
- Go Struct超詳細講解GoStruct
- 【JS系列】物件詳解JS物件
- grpc系列- protobuf詳解RPC
- 【SpringBoot系列】SpringBoot註解詳解Spring Boot
- [kubernetes系列]HPA模組深度講解
- Redis原始碼系列之rename講解Redis原始碼
- MySQL explain命令詳解MySqlAI
- MySql之EXPLAN詳解MySql
- MySQL Online DDL詳解MySql
- MySQL Performance Schema詳解MySqlORM