亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql心得分享:存儲過程

 更新時間:2014年07月15日 08:40:51   投稿:hebedich  
MySQL 5.0以后的版本開始支持存儲過程,存儲過程具有一致性、高效性、安全性和體系結(jié)構(gòu)等特點(diǎn),本文主要來分享下本人關(guān)于存儲過程的一些心得體會。
use test;

drop table if exists t8;
CREATE TABLE t8(s1 INT,PRIMARY KEY(s1));

drop procedure if exists handlerdemo;

DELIMITER $$
CREATE PROCEDURE handlerdemo()
BEGIN
declare xx int default 4;
DECLARE oh_no condition for sqlstate '23000';
#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;
declare exit handler for oh_no set @info='違反主鍵約束';
SET @X=1;
INSERT INTO t8 VALUES(1);
SET @X=2;
INSERT INTO t8 VALUES(1);
SET @X=3;
END

調(diào)用存儲過程

/* 調(diào)用存儲過程*/
CALL handlerdemo();

/* 查看調(diào)用存儲過程結(jié)果*/
SELECT @X,@info;

心得體會:

1、語句結(jié)束符

也許mysql是將存儲過程、自定義函數(shù)看作一條語句的,因此,存儲過程里多條語句用“;”隔開,為了避免沖突,就要用delimiter 重新定義結(jié)束符。

一般可以在存儲過程開始前,定義新的結(jié)束符,如

delimiter //

存儲過程書寫完畢以后,再恢復(fù)定義:delimiter ;

但也可以在存儲過程開始前,這樣寫 delimiter $$,但存儲過程后不可以再寫別的語句了。如上面的例子

2、變量

mysql的變量,跟SQL SERVER一樣,形如 @X ,但無需聲明,直接使用。

而在存儲過程里面,變量無須用 @,但要聲明。并且聲明要放在存儲過程的頭部(?),如本例,否則報(bào)錯。真奇怪啊,一方面,有時候變量無須聲明就可以使用,另一方面,有時候又要限定聲明位置,令人無所適從,似乎隨便了點(diǎn)。

存儲過程內(nèi)部的變量,作用范圍僅限于存儲過程。但那些帶@的變量,卻仿佛可以跨越會話和連接,看上去是全局變量?如上面的例子。

3、條件和處理

定義條件,是為了給處理調(diào)用。如上面的例子:

DECLARE oh_no condition for sqlstate '23000';
#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;
declare exit handler for oh_no set @info='違反主鍵約束';

相關(guān)文章

最新評論