MySQL中使用游標觸發(fā)器的方法
游標
select檢索返回的一組行稱為結果集,結果集里的行都是根據(jù)你輸入的sql語句檢索出來的,如果不使用游標,你將沒有辦法得到第一行,前十行或者是下一行
下面是一些常見的游標現(xiàn)象和特性
- 能夠標記游標為只讀,是數(shù)據(jù)能夠讀取,但不能被更新或者刪除
- 能控制可以執(zhí)行的定向操作(向前,向后,第一,最后、絕對位置和相對位置等)
- 能標記某些行為可編輯的,而另一些行為不可編輯的
- 能規(guī)定范圍,使游標對創(chuàng)建它的特定請求或者是所有請求可訪問
- Cursor declarations must appear before handler declarations and after
- variable and condition declarations.
- 需要注意的是,打開一個游標時,游標并不指向第一條記錄,而是指向第一條記錄的前邊
下面是使用游標的步驟
- 聲明游標 – 在這個過程中你還沒有開始檢索數(shù)據(jù)
- 打開游標以供使用
- 檢索各行
- 關閉游標,釋放游標
DECLARE cs CURSOR FOR SELECT * FROM customers WHERE cust_email IS NULL;
本以為萬事大吉,但卻給我報錯

從語法上來看沒有什么問題
試著在 cs 前面加上@,運行仍然報錯
還有人說游標只能在存儲過程中使用,是這樣嗎?
現(xiàn)在我們來試一試在存儲過程中使用游標
CREATE PROCEDURE proce1 () BEGIN DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL tianyoutianyou; END
仍然出錯
再次更改
delimiter // CREATE PROCEDURE proce1 () BEGIN DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL; END
這次我們成功地聲明游標
是不是因為我們修改了分隔符然我們成功地創(chuàng)建游標了呢?
我們再試試
CREATE PROCEDURE proce1() DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL;
這樣也是錯誤的,下面再試試不使用存儲過程地語句能否成功創(chuàng)建游標
delimiter // DECLARE cur2 CURSOR FOR SELECT * FROM orders ;
或者是這樣
delimiter // DECLARE cur2 CURSOR FOR SELECT * FROM orders //
這兩種也8行
試了這么多次,唯一成功的只有下面這種語句
delimiter // CREATE PROCEDURE proce1() BEGIN DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL; END
下面我們用游標來檢索數(shù)據(jù)
很遺憾,MySQL中沒有像Oracle中 %ROWTYPE 般的數(shù)據(jù)類型,我們下面試著使用游標來檢索customers表中的某一類數(shù)據(jù)類型
觸發(fā)器
觸發(fā)器時特定的存儲過程,在數(shù)據(jù)庫發(fā)生特定活動時自動進行,一般來說,約束的處理比觸發(fā)器更快,因此在可能的時候,應該盡可能地使用約束。
到此這篇關于MySQL中使用游標觸發(fā)器的方法的文章就介紹到這了,更多相關mysql游標觸發(fā)器內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
關注官方微信