MySQL中使用游標(biāo)觸發(fā)器的方法
游標(biāo)
select檢索返回的一組行稱為結(jié)果集,結(jié)果集里的行都是根據(jù)你輸入的sql語(yǔ)句檢索出來(lái)的,如果不使用游標(biāo),你將沒(méi)有辦法得到第一行,前十行或者是下一行
下面是一些常見(jiàn)的游標(biāo)現(xiàn)象和特性
- 能夠標(biāo)記游標(biāo)為只讀,是數(shù)據(jù)能夠讀取,但不能被更新或者刪除
- 能控制可以執(zhí)行的定向操作(向前,向后,第一,最后、絕對(duì)位置和相對(duì)位置等)
- 能標(biāo)記某些行為可編輯的,而另一些行為不可編輯的
- 能規(guī)定范圍,使游標(biāo)對(duì)創(chuàng)建它的特定請(qǐng)求或者是所有請(qǐng)求可訪問(wèn)
- Cursor declarations must appear before handler declarations and after
- variable and condition declarations.
- 需要注意的是,打開(kāi)一個(gè)游標(biāo)時(shí),游標(biāo)并不指向第一條記錄,而是指向第一條記錄的前邊
下面是使用游標(biāo)的步驟
- 聲明游標(biāo) – 在這個(gè)過(guò)程中你還沒(méi)有開(kāi)始檢索數(shù)據(jù)
- 打開(kāi)游標(biāo)以供使用
- 檢索各行
- 關(guān)閉游標(biāo),釋放游標(biāo)
DECLARE cs CURSOR FOR SELECT * FROM customers WHERE cust_email IS NULL;
本以為萬(wàn)事大吉,但卻給我報(bào)錯(cuò)
從語(yǔ)法上來(lái)看沒(méi)有什么問(wèn)題
試著在 cs 前面加上@,運(yùn)行仍然報(bào)錯(cuò)
還有人說(shuō)游標(biāo)只能在存儲(chǔ)過(guò)程中使用,是這樣嗎?
現(xiàn)在我們來(lái)試一試在存儲(chǔ)過(guò)程中使用游標(biāo)
CREATE PROCEDURE proce1 () BEGIN DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL tianyoutianyou; END
仍然出錯(cuò)
再次更改
delimiter // CREATE PROCEDURE proce1 () BEGIN DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL; END
這次我們成功地聲明游標(biāo)
是不是因?yàn)槲覀冃薷牧朔指舴晃覀兂晒Φ貏?chuàng)建游標(biāo)了呢?
我們?cè)僭囋?/p>
CREATE PROCEDURE proce1() DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL;
這樣也是錯(cuò)誤的,下面再試試不使用存儲(chǔ)過(guò)程地語(yǔ)句能否成功創(chuàng)建游標(biāo)
delimiter // DECLARE cur2 CURSOR FOR SELECT * FROM orders ;
或者是這樣
delimiter // DECLARE cur2 CURSOR FOR SELECT * FROM orders //
這兩種也8行
試了這么多次,唯一成功的只有下面這種語(yǔ)句
delimiter // CREATE PROCEDURE proce1() BEGIN DECLARE cur1 CURSOR FOR SELECT * FROM customers WHERE cust_id IS NULL; END
下面我們用游標(biāo)來(lái)檢索數(shù)據(jù)
很遺憾,MySQL中沒(méi)有像Oracle中 %ROWTYPE 般的數(shù)據(jù)類型,我們下面試著使用游標(biāo)來(lái)檢索customers表中的某一類數(shù)據(jù)類型
觸發(fā)器
觸發(fā)器時(shí)特定的存儲(chǔ)過(guò)程,在數(shù)據(jù)庫(kù)發(fā)生特定活動(dòng)時(shí)自動(dòng)進(jìn)行,一般來(lái)說(shuō),約束的處理比觸發(fā)器更快,因此在可能的時(shí)候,應(yīng)該盡可能地使用約束。
到此這篇關(guān)于MySQL中使用游標(biāo)觸發(fā)器的方法的文章就介紹到這了,更多相關(guān)mysql游標(biāo)觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)庫(kù)的用戶帳號(hào)管理基礎(chǔ)知識(shí)
數(shù)據(jù)庫(kù)的用戶帳號(hào)管理基礎(chǔ)知識(shí)...2006-11-11從數(shù)據(jù)庫(kù)中取出最近三十天的數(shù)據(jù)并生成柱狀圖
從數(shù)據(jù)庫(kù)中取出最近三十天的數(shù)據(jù)并生成柱狀圖的代碼,需要的朋友可以參考下。2011-05-05Mysql?optimize?table?時(shí)報(bào)錯(cuò):Temporary?file?write?fail的解決
這篇文章主要介紹了Mysql?optimize?table?時(shí)報(bào)錯(cuò):Temporary?file?write?fail的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Window環(huán)境下MySQL?UDF提權(quán)
本文章僅記錄某次內(nèi)網(wǎng)滲透過(guò)程中遇到的MySQL?采用UDF提權(quán)等方式進(jìn)行獲取權(quán)限,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>2023-03-03innodb 庫(kù)的備份注意點(diǎn)(由phpmyadmin引起的解決方案)
新版本xampps 1.8.5 X64 集成了phpmyadmin最新版本(4.1.0), 可每次初始化安裝程序后, 進(jìn)入phpmyadmin管理工具, 就會(huì)發(fā)現(xiàn)phpmyadmin高級(jí)功能失效, 一直在提示數(shù)據(jù)表不存在, 經(jīng)過(guò)再三的分析, 終于找到原因2013-12-12