-- 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 建...