mysql建立儲存過程

2021-09-23 20:08:51 字數 2554 閱讀 2258

-- use d_youmitest; 將會把d_youmitest;作為整個資料庫名稱,空格+; 所以書寫時注意習慣

use d_youmitest

--下面這行是個坑,而且不能帶「;」,否則將「//;」作為整體;如果不加此--行,看到的效果是 declare 那幾行的都將標識為紅色包含錯誤。

delimiter //

create

procedure sp_bind_card(

p_cellphone varchar(16),

p_name varchar(100),

p_id_card varchar(50),

p_bank_card_no varchar(50),

p_channel_name varchar(100),

p_bank_abbr varchar(16),

out p_returnval varchar(50)

)begin

declare user_id ,channel_account_id,bank_channel_info_id,account_id,channel_id bigint ;

-- 如sql異常,回滾事務並設定返回失敗

declare exit handler

for sqlexception,sqlwarning,not

found

begin

rollback;

set p_returnval='fail';

end;

-- disable autocommit

set autocommit=0;

-- get user_id

select c_user_id into user_id from t_user where c_cellphone =p_cellphone;

-- get channel_id and bank_channel_info_id;注意多字段時into的用法

select t1.c_bank_channel_info_id ,t1.c_channel_id into bank_channel_info_id, channel_id

from t_bank_channel_info t1 join t_channel t2 on t1.c_channel_id=t2.c_channel_id

where t1.c_abbr=p_bank_abbr and t2.c_name=p_channel_name;

# begin trans

start

transaction;

update t_user set c_name=p_name,c_card_id=p_id_card where c_user_id=user_id;

insert

into t_account (c_user_id,c_bank_channel_info_id,c_bankcard_no,c_status,c_security_level)

values(user_id,bank_channel_info_id,p_bank_card_no,1,1);

select @@identity

into account_id;

insert

into t_channel_account(c_account_id,c_channel_id,c_is_active)values(account_id,channel_id,0);

commit;

set p_returnval='success';

end;//

delimiter ;

1、delimiter使用:在 程式被定義的時候,用mysql客戶端delimiter命令來把語句定界符從 「;」變為「//」。這就允許用在 程式體中的「;」定界符被傳遞到伺服器而不是被mysql自己來解釋。

2、方案二:將以上指令碼放入到檔案中,然後使用source 命令建立,eg:放到 vi data/testsql.sql檔案中,在mysql命令列下輸入

source /home/kuoren/data/test.sql。注意最後兩行 ,尤其「//」的位置

備註:source 的縮寫「.」,則 source /home/kuoren/data/test.sql 等價 . /home/kuoren/data/test.sql

3、mysql變數:@@標示系統變數 如 @@identity;

@標示使用者自定義全域性變數;

declare varname vartype default defaultvalue 定義當前塊變數。

4 id自增設置,設定id為 auto_increment;同時指定auto_increment=1.當在新增行時,雖然設定了auto_increment=1,但仍然不是從1開始增長,主要是由於在mysql中自增變數是位於記憶體中的,即便把錶刪除,其仍然不會恢復到1開始增長,eg :現在表a有三條記錄,id為3,drop table 表a後,建立表a在新增記錄,會從4增長,重啟mysql服務也會遇到id重複問題,就由此導致.

5、寫連續mysql 語句時,注意;的使用

MySQL建立儲存過程

在開發過程中,經常會遇到重複使用某乙個功能的情況,為此,mysql引入了儲存過程 儲存過程 就是一條或多條sql語句的集合,當對資料庫進行一系列複雜操作時,儲存過程可以將這些複雜操縱,封裝成乙個 塊,以便重複使用,大大減少資料庫開發人員的工作量 使用create procedure語句 create...

MYSQL 建立儲存過程

無引數儲存過程 delimiter create procedure myfist proc 建立儲存過程 begin select stu id from score where grade 80 and c name 計算機 select name from student where id i...

mysql建立儲存過程

坑一 mysql建立儲存過程中,儲存過程的輸入引數變數命名不應該與欄位名相同。如果相同,導致的結果就是引數的值將不會是你傳入的值,而是變成每條記錄的那個欄位的值。如果在刪除操作時,將會刪除整張表的記錄,是非常危險的。刪除儲存過程 drop procedure if exists pro test 建...