從mysql V5.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
這個語句關閉先前打開的游標,注意,用完後必須關閉。
(四)示例,下面是一個存儲過程,裡面用到游標,逐條更新數據(批量更新數據)
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