近來用了下存儲過程,簡單的記錄總結一下。
使用存儲過程,可以對數據庫進行更復雜寫的邏輯處理。比如說,我要將一個表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語句是可以的,親測有效。