從mysqlV5.5開始,進行了一次大的改變,就是將InnoDB作為默認的存儲引擎。InnoDB支持事務,而且擁有相關的RDBMS特性:ACID事務支持,數據完整性(支持外鍵),災難恢復能力等等。
現在簡單總結一下游標的知識。
(一),認識游標(cursor)
就是一個可讀的標識,用來標識數據取到什么地方了。
(二),游標特性
1,只讀 2,不滾動 3,不敏感的
(三),使用游標
需要強調的是,游標必須在定義處理程序之前被定義,但變量必須在定義游標之前被定義,順序就是變量定義-游標定義-處理程序。
1.定義游標
DECLARE cursor_name CURSOR FOR select_statement 這個語句聲明一個游標。也可以在子程序中定義多個游標,一個塊中的每一個游標必須命名唯一。聲明游標后也是單條操作的。
2. 游標OPEN
OPEN cursor_name 這個語句打開先前聲明的游標。
3. 游標FETCH
FETCH cursor_name INTO var_name [, var_name] ... 這個語句用指定的打開游標讀取下一行(如果有下一行的話),並且前進游標指針至該行。
4. 游標CLOSE
CLOSE cursor_name 這個語句關閉先前打開的游標,注意,用完后必須關閉。
(四)示例,下面是一個存儲過程,里面用到游標,逐條更新數據(批量更新數據)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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
|