MySQL觸發(fā)器應(yīng)用與其存儲(chǔ)過(guò)程的實(shí)際操作
以下的文章主要描述的是MySQL觸發(fā)器的實(shí)際應(yīng)用與其存儲(chǔ)過(guò)程的實(shí)際操作,以下的文章將會(huì)給你提供相應(yīng)的詳細(xì)方案講解,以下就是相關(guān)內(nèi)容的具體描述。希望會(huì)給你帶來(lái)一些幫助在此方面。
觸發(fā)器:
MySQL數(shù)據(jù)庫(kù)創(chuàng)建觸發(fā)器的格式如下:
create trigger <觸發(fā)器名稱(chēng)>
{ before | after}
{insert | update | delete}
on <表名>
for each row
<觸發(fā)器SQL語(yǔ)句>
<觸發(fā)器SQL語(yǔ)句>:觸發(fā)器要執(zhí)行的SQL語(yǔ)句,如果該觸發(fā)器要執(zhí)行多條SQL語(yǔ)句,要將多條語(yǔ)句放在begin…end塊中。
Show triggers 顯示所有的觸發(fā)器信息!
存儲(chǔ)過(guò)程:
創(chuàng)建
- DELIMITER $$
- DROP PROCEDURE IF EXISTS `test`.`outprint`$$
- CREATE PROCEDURE print1(out a varchar(100))
- BEGIN
- select name from info into a;
- END$$
- DELIMITER ;
調(diào)用
- Call print1(@c);
- Select @c;
注意
這樣傳值只能查找一個(gè)值賦給a
Select * from info into a就錯(cuò)了
Show create {procedure | function } 名字
查看存儲(chǔ)過(guò)程和函數(shù)
Drop {procedure | function} [if exists] 名字
Alter {procedure | function} 名字
注意:通過(guò) begin end 可以來(lái)包含多個(gè)語(yǔ)句,每個(gè)語(yǔ)句以“;”結(jié)尾。
創(chuàng)建插入
- DELIMITER $$
- DROP PROCEDURE IF EXISTS `test`.`insert_info`$$
- CREATE DEFINER=`root`@`%` PROCEDURE `insert_info`(in id int(5),in name varchar(50),in age int(5))
- begin
- insert into info values (id,name,age);
- end$$
- DELIMITER ;
調(diào)用
- call insert_info(2,'rrr',56);
創(chuàng)建插入輸出(驗(yàn)證密碼用)
- Delimiter $$
- Create procedure validateuser
- (in username varchar(20),out param1 varchar(100))
- Begin
- Select Pwd into param1 from welefen.user
- where Name=username;
- End $$
調(diào)用
- call check1('sss',@pw);
- select @pw;
驗(yàn)證角谷猜想
角谷猜想:給定一個(gè)整數(shù)x,若x%2=1,則x=3*x+1,
否則x=x/2,
如此循環(huán)下去
,經(jīng)過(guò)有限步驟必 能得到1。
例如: 初始整數(shù)為9 則
9->28->14->7->22->11->34->17->52->26
->13->40->20->10->5->16->8->4->2->1
為了說(shuō)明存儲(chǔ)過(guò)程語(yǔ)法的應(yīng)用,存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)它:
創(chuàng)建存儲(chǔ)過(guò)程:
- delimiter $$
- drop procedure if exists jgguess$$
- create procedure jgguess(in number int)
- begin
- declare param1 int default 1;
- set @a=concat(number);
jiaogu:loop #循環(huán)開(kāi)始
set param1=number%2;
if param1=1 then set number=number*3+1; #number 為奇數(shù),將它乘3加 1
else set number=number/2;
end if;
set @a=concat(@a,'->',number);
if number>1 then iterate jiaogu; #number 不為 1,繼續(xù)循環(huán)
else
leave jiaogu; #退出循環(huán)
- end if;
- end loop jiaogu;
- end $$
- delimiter ;
調(diào)用:
- call jgguess(9);
- select @a;
以上的相關(guān)內(nèi)容就是對(duì)MySQL中觸發(fā)器和存儲(chǔ)過(guò)程的介紹,望你能有所收獲。
【編輯推薦】
- MySQL觸發(fā)器如何正確使用
- MySQL修改root密碼并不難
- 恢復(fù)MySQL數(shù)據(jù)庫(kù)root密碼2方案
- MySQL數(shù)據(jù)表中字段的批量修改與復(fù)制
- MySQL查詢(xún)優(yōu)化的5個(gè)好用方法