当前位置: 首页 > news >正文

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
BEGINUPDATE `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)) THENBEGIN-- 报告表,更新可合并编制标识UPDATE REPORT SET REP_CANUNION = 1 WHERE rep_outerApplyId = outerApplyId;-- 获取报告idSELECT rep_Id INTO reportId FROM REPORT WHERE rep_outerApplyId = outerApplyId LIMIT 1;-- 更新检验报告的合并报告idUPDATE CHKREPORT SET RP_UNIONEDREPID = reportId WHERE rp_OuterApplyId = outerApplyId;END;END IF;
END;
-- 语句结束符 $$
$$
-- 将语句结束符更改为 ;【注意:DELIMITER后面必须有个空格,DELIMITER;并不是一条合法的sql语句】
DELIMITER ;


http://www.mrgr.cn/news/62281.html

相关文章:

  • 【ES6复习笔记】迭代器(10)
  • Java实现观察者模式
  • 机器学习之数据分析及特征工程详细分析过程
  • 多个微服务 Mybatis 过程中出现了Invalid bound statement (not found)的特殊问题
  • 关于Vue的子组件改变父组件传来的值
  • 电脑提示报错NetLoad.dll文件丢失或损坏?是什么原因?
  • Spring Cloud --- 引入Seata分布式事务
  • Linux网络命令:系统中用于显示和操作 ARP缓存表的命令arp详解
  • C语言——八股文(笔试面试题)
  • Redis 主从同步 问题
  • 使用Go构建以太坊
  • 机器学习与神经网络荣获2024年诺贝尔物理学奖:意义与未来展望
  • 设计模式-建造者模式(代码实现、源码级别应用、使用场景)
  • At dp综合
  • 算法训练(leetcode)二刷第十三天 | 110. 平衡二叉树、*257. 二叉树的所有路径、404. 左叶子之和、*222. 完全二叉树的节点个数
  • #渗透测试#SRC漏洞挖掘# 信息收集-Shodan之网页版
  • 面试简历技巧分享
  • threejs开源实例-粒子地球
  • SSH免密钥登录
  • 分布式架构搭建博客网站
  • https加密过程详解
  • CountDownLatch与CyclicBarrier的比较应用
  • 头歌网络安全爬虫
  • Redis 发布订阅 总结
  • 图像篡改研究
  • 未来生活中的AI电脑是怎样的