mysql使用DELIMITER,创建触发器、存储过程、存储函数

图形化工具:SQLyog 

软件官方网站:Webyog | Tools for MySQL and MariaDB Databases

软件下载地址:Downloads · webyog/sqlyog-community Wiki · GitHub

DELIMITER主要作用是改变语句结束符。默认情况下,MySQL使用分号 ; 作为语句结束符。

然而,在编写存储过程、函数或触发器等复杂SQL代码时,我们可能需要在代码块中使用分号来结束单个SQL语句。这时候就需要DELIMITER命令来临时改变默认的语句结束符。

1、创建触发器,简单示例

-- 将语句结束符更改为 $$
DELIMITER $$
-- 如果存在该触发器,则先删除。【注意:后面语句结束符为 $$】
DROP TRIGGER IF EXISTS `WYLIMS`.`trig_EMPLOYEE_Insert`$$
-- 创建触发器
CREATE TRIGGER `WYLIMS`.`trig_EMPLOYEE_Insert`
AFTER INSERT
ON `WYLIMS`.`EMPLOYEE`
FOR EACH ROW
BEGIN
	UPDATE `ACCOUNT1` SET ACC_VALID = 1 WHERE 1 = 1;
	UPDATE `ACCOUNT2` SET ACC_VALID = 1 WHERE 1 = 2;
	UPDATE `ACCOUNT3` SET ACC_VALID = 1 WHERE 1 = 3;
END;
-- 语句结束符 $$
$$
-- 将语句结束符更改为 ;【注意:DELIMITER后面必须有个空格,DELIMITER;并不是一条合法的sql语句】
DELIMITER ;

2、创建触发器,复杂示例(有变量、有 if 判断)

-- 将语句结束符更改为 $$
DELIMITER $$
-- 如果存在该触发器,则先删除。【注意:后面语句结束符为 $$】
DROP TRIGGER IF EXISTS `WYLIMS`.`trig_CHKREPITEMTASKOFSAMLE_Update`$$
-- 创建触发器
CREATE TRIGGER `WYLIMS`.`trig_CHKREPITEMTASKOFSAMLE_Update`
AFTER UPDATE
ON `WYLIMS`.`CHKREPITEMTASKOFSAMLE`
FOR EACH ROW
BEGIN
	-- 定义变量
	DECLARE outerApplyId VARCHAR(20);
	DECLARE reportId INT;
	-- 变量赋值
	SELECT app_OuterApplyId INTO outerApplyId FROM APPLY WHERE APP_ID = new.rvt_ApplyId;
	-- 该受理编号不存在没有提交的样品项目(所有样品项目都已经提交)
	IF NOT EXISTS(SELECT RVT_ID FROM CHKREPITEMTASKOFSAMLE INNER JOIN APPLY ON APP_ID = RVT_APPLYID 
	WHERE APP_OUTERAPPLYID = outerApplyId AND RVT_STATE IN(1,4)) THEN
	BEGIN
		-- 报告表,更新可合并编制标识
		UPDATE REPORT SET REP_CANUNION = 1 WHERE rep_outerApplyId = outerApplyId;
		-- 获取报告id
		SELECT rep_Id INTO reportId FROM REPORT WHERE rep_outerApplyId = outerApplyId LIMIT 1;
		-- 更新检验报告的合并报告id
		UPDATE CHKREPORT SET RP_UNIONEDREPID = reportId WHERE rp_OuterApplyId = outerApplyId;
	END;
	END IF;
END;
-- 语句结束符 $$
$$
-- 将语句结束符更改为 ;【注意:DELIMITER后面必须有个空格,DELIMITER;并不是一条合法的sql语句】
DELIMITER ;

3、存储过程(无参数),创建、调用

-- 将语句结束符更改为 $$
DELIMITER $$
-- 如果存在该存储过程,则先删除。【注意:后面语句结束符为 $$】
DROP PROCEDURE IF EXISTS `WYLIMS`.`proc_Test`$$
-- 创建存储过程
CREATE PROCEDURE `WYLIMS`.`proc_Test`()
BEGIN
	SELECT '这是无参存储过程' AS msg;
END;
-- 语句结束符 $$
$$
-- 将语句结束符更改为 ;【注意:DELIMITER后面必须有个空格,DELIMITER;并不是一条合法的sql语句】
DELIMITER ;

4、存储过程(有 in 参数),创建、调用

-- 将语句结束符更改为 $$
DELIMITER $$
-- 如果存在该存储过程,则先删除。【注意:后面语句结束符为 $$】
DROP PROCEDURE IF EXISTS `WYLIMS`.`proc_Test`$$
-- 创建存储过程
CREATE PROCEDURE `WYLIMS`.`proc_Test`(
IN id INT,
IN username VARCHAR(20))
BEGIN
	SELECT '这是有输入参数的存储过程' AS msg;
END;
-- 语句结束符 $$
$$
-- 将语句结束符更改为 ;【注意:DELIMITER后面必须有个空格,DELIMITER;并不是一条合法的sql语句】
DELIMITER ;

5、 存储过程(有 in 、out 参数),创建、调用

-- 将语句结束符更改为 $$
DELIMITER $$
-- 如果存在该存储过程,则先删除。【注意:后面语句结束符为 $$】
DROP PROCEDURE IF EXISTS `WYLIMS`.`proc_Test`$$
-- 创建存储过程
CREATE PROCEDURE `WYLIMS`.`proc_Test`(
IN id INT,
IN username VARCHAR(20),
OUT mark VARCHAR(20))
BEGIN
	SELECT '这是有输入输出参数的存储过程' AS msg;
END;
-- 语句结束符 $$
$$
-- 将语句结束符更改为 ;【注意:DELIMITER后面必须有个空格,DELIMITER;并不是一条合法的sql语句】
DELIMITER ;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值