mysql prepare存儲過程

近來用了下存儲過程,簡單的記錄總結一下。

使用存儲過程,可以對數據庫進行更復雜寫的邏輯處理。比如說,我要將一個表subscriber的最大id獲取到,然後複製給另外一張表usage的auto_increment,就可以這樣做。

1. 獲取最大id

SET @m = (SELECT MAX(id) + 10000 FROM subscriber);

@m爲所要使用的參數

2. 準備賦值AUTO_INCREMENT的sql語句,此處用到了concat函數

SET @s = CONCAT('ALTER TABLE usage AUTO_INCREMENT=', @m);

3. prepare並執行

PREPARE stmt1 FROM @s;

EXECUTE stmt1;

4. 釋放資源

DEALLOCATE PREPARE stmt1;

此處第二步也可以通過別的方法進行參數傳遞,比如:

SET @m = (SELECT min(id) FROM subscriber);
PREPARE stmt1 FROM "select * from subscriber where id=?";
EXECUTE stmt1 using @m;
DEALLOCATE PREPARE stmt1;

但是這種傳參方法對於alter table auto_increment不起作用, update語句是可以的,親測有效。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章