1. 程式人生 > >MySQL-SQL之遊標,觸發器和事務

MySQL-SQL之遊標,觸發器和事務

遊標的出現使得對一個查詢結果集的每一行結果能夠更細粒度的操作,現在MySQL只支援在儲存過程中定義儲存過程。一個遊標的使用過程是這樣的:
* 使用 <declare 遊標名 cursor for 查詢語句> 定義一個遊標
* 使用 <open 遊標名> 開啟遊標準備使用
* 使用fetch語句獲取結果中的一行結果到變數 <fetch 遊標名 into 變數名>
* 使用 <close 遊標名>關閉遊標

建立並使用遊標

下面是一個通過遊標遍歷每一行並輸出的過程

效果如下,每行都會列印一個結果

建立觸發器

建立觸發器要指明四點:1)觸發器的名字,2)觸發器響應的活動(delete,insert,update),3)觸發器響應活動的時間(before after),4)觸發器關聯的表名稱
所以觸發器的建立格式是:create trigger 觸發器名稱 觸發器時間 觸發器響應活動 on 關聯表名 for each row begin 處理邏輯 end;


一個例項,比如我在修改一個customer的資訊的時候記錄下對應的cust_id,cust_name和對方的ip,已經修改的時間到customer_audit表


執行一條update語句修改customers中的值得到

使用事務

使用start transaction;開啟事務,根據業務處理判斷後選擇提交事務commit;或者回滾rollback;,注意預設的mysql是開啟自動提交事務的,需要手動設定set autocommit=0關閉事務,可以通過row_count()>0函式獲取執行結果是否執行成功,最好在執行完命令後就獲取對應的結果值。我們同樣可以通過last_insert_id()

獲取自增的id值。
注意declare宣告的區域性變數僅使用於儲存過程的begin,end塊中,並且要在begin開始後就宣告所需要的區域性變數,不然會報出執行錯誤,如果想要在儲存過程之外使用變數,可以使用以@開頭的使用者變數,下面是一個使用事務處理的例子。

參考文件

相關推薦

MySQL-SQL遊標觸發器事務

遊標的出現使得對一個查詢結果集的每一行結果能夠更細粒度的操作,現在MySQL只支援在儲存過程中定義儲存過程。一個遊標的使用過程是這樣的: * 使用 <declare 遊標名 cursor for 查詢語句> 定義一個遊標 * 使用 <ope

MySQL基礎(9)——遊標觸發器事務處理

本篇主要整理如何使用遊標、觸發器以及管理事務處理的相關內容。 本篇內容 適用於MySQL 5及以後的版本。 一、遊標 遊標:是一個儲存在MySQL伺服器上的資料庫查詢,它不是一條SELECT

MySql基礎教程二(檢視儲存過程遊標觸發器事務許可權資料型別)

檢視 檢視是虛擬的表。與包含資料的表不一樣,檢視只包含使用時動態檢索資料的查詢。比如下面的語句: select cust_name, cust_contact from customers, orders, orderitems where customers.cust_id=orders.cust_i

自學sqlSQL 是用於訪問處理數據庫的標準的計算機語言!

oracle 計算機語言 數據庫連接 sql語言 probable http://www.w3school.com.cn/sql/index.asp 自學是sql一個坎坷,並且需要堅持的。遇到問題不知道如何下手!報錯了不知道怎麽找到錯誤。以下是我跟著w3cschool學習sql語言的過

MySQL並發控制事務

生命周期 ted 可重復 mvc 因此 寫入 做出 vpd city 並發控制鎖粒度:表級鎖行級鎖鎖:讀鎖:共享鎖,只讀不可寫,多個讀互不阻塞,寫鎖:獨占鎖,排它鎖,一個寫鎖會阻塞其它讀和寫鎖實現存儲引擎:自行實現其鎖策略和鎖粒度服務器級:實現了鎖,表級鎖;用戶可顯式請求分

MySQL檢視、觸發器事務、儲存過程

http://www.cnblogs.com/linhaifeng/articles/7495918.html 檢視 ​ 試圖就是一個虛擬表(非真實存在),本質就是【根據sql語句獲取動態的資料集,併為其命名】,使用者使用時只需要使用名稱即可獲取資料集,可將該資料集當作表來使用。 ''' what: 檢

SQL遊標臨時表

今天使用了遊標來進行兩個表之間的資料比較,並用臨時表記錄。做個記錄以便使用。。 <p> DECLARE @id int, @name varchar(50), @sex varchar(50), @class varchar(50), @type varchar

SQL儲存過程、觸發器遊標

儲存過程 1、儲存過程是事先編好的、儲存在資料庫中的程式,這些程式用來完成對資料庫的指定操作。 2、系統儲存過程: SQL Server本身提供了一些儲存過程,用於管理有關資料庫和使用者的資訊。 使用者儲存過程: 使用者也可以編寫自己的儲存過程,並把它存放在資料庫中,供客戶端呼叫。 3、這樣安排的主要目的就

Transaction坑:分析sql執行結果主動促使事務rollback

場景 JavaWeb開發,在開啟事務的Service層方法中,編寫業務邏輯時,經常會使用到如下兩種方式: 手動丟擲異常(如果你沒有配置 一般異常事務回滾,請丟擲 RuntimeEc

SQLtrigger(觸發器

支持 lte -- creat sql語句 存在 每一個 print upd 先來看一小段程序 有如下三張表: 帳戶(編號,姓名,余額,建立日期,儲蓄所編號) 儲蓄所(編號,名稱,地址,人數,所屬城市) 借貸(帳戶,借貸類型,金額,日期) 1 create

mysql系列5--完全備份增量備份

bsp 定時 實時 sta form sql -a posit 密碼 一、利用系統自帶的工具實現完全備份:mysqldump1、備份所有的數據庫: mysqldump -hlocalhost -uroot -p12345678 --all-database

mysql的視圖觸發器存儲過程函數事物數據庫鎖數據庫的備份還原

基本類型 一個 tom 管理 where 模式 程序 sele 數學 視圖    視圖:是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據 視圖有如下特點;   1. 視圖的列可以來自不同的表,是表的抽象和邏輯意義上建立的新關系。   2.

Oracle觸發器事務

  oracle觸發器和事務 2015年11月24日 14:16:43 it_taojingzhan 閱讀數:320 編寫觸發器時,需要注意以下幾點: l        觸發

第5天資料型別整形字串列表

整形(不可變,儲存一個值) 對於int型別的解釋 把一個數字或者字串轉換成整形,如果沒有引數就返回0,如果引數是一個數字,那麼就不變。對於浮點型,會自動省略小數點後面的值Convert a number or string to an integer, or return 0 if no arguments

高可用Redis(六):瑞士軍刀bitmapHyperLoglogGEO

1.bitmap點陣圖 1.1 bitmap點陣圖的概念 首先來看一個例子,字串big, 字母b的ASCII碼為98,轉換成二進位制為 01100010 字母i的ASCII碼為105,轉換成二進位制為 01101001 字母g的ASCII碼為103,轉換成二進位制為 01100111 如果在Redis中,設定

Hive:自定義函式UDFUDAFUDTF

hive允許使用者使用自定義函式解決hive 自帶函式無法處理的邏輯。hive自定義函式只在當前執行緒內臨時有效,可以使用shell指令碼呼叫執行hive命令。 UDF 輸入一行資料輸出一行資料。  解決問題描述  想要比較兩個逗號分隔的字串是否相同。  -使用方法  如果

C++PrimerPlus學習輸入輸出檔案

流和緩衝區 C++程式把輸入和輸出看作位元組流。輸入時,程式從輸入流中抽取位元組;輸出時,程式將位元組插入到輸出流中。 流充當了程式和流源或流目標之間的橋樑。C++程式只是檢查位元組流,而不需要知道位

Java中的集合ArrayListVectorStack

這三個集合型別,其底層都是陣列實現的。討論集合關注的問題: 底層資料結構 增刪改查方式 初始容量,擴容方式,擴容時機 執行緒安全與否 是否允許空,是否允許重複,是否有序 ArrayList ArrayList是

java面試題wait()notify()suspend()resume()之間的區別

wait()方法和notify()方法的區別: 這兩個方法都是屬於Object類中的,也是配套使用的,當呼叫這兩個方法阻塞時要釋放佔用的鎖,而鎖是任何物件都具有的,呼叫任意物件的wait()方法導致執行緒阻塞,並且該物件上的鎖被釋放; 而呼叫任意物件的notify()方法則導致從呼叫該物件的wait()方

liunx學習筆記打包壓縮yum源配置

############################################ #############unit 12######################## ############################################ 1.