栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL:如何在触发器中使用定界符?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL:如何在触发器中使用定界符?

第1部分

分隔符用于源对象,例如存储过程/函数,触发器或事件。所有这些对象都可以具有主体-BEGIN … END子句中的代码。

MySQL脚本中的所有语句均应以定界符结尾,默认值为“;”。但是,如果源对象的主体带有一些语句,例如:

INSERT INTO table1 VALUES(1);CREATE PROCEDURE procedure1()BEGIN  SET @s = 'SELECt SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';  PREPARE stmt2 FROM @s;  SET @a = 6;  SET @b = 8;  EXECUTE stmt2 USING @a, @b;END;INSERT INTO table1 VALUES(2);

多少个州议员?3还是8?答案是三个,因为脚本有两个INSERT和一个CREATE PROCEDURE语句。如您所见,CREATE
PROCEDURE也有一些内部语句。我们应该对MySQL客户端说,所有这些语句(在BEGIN …
END内部)-是ONE语句的一部分;我们可以借助定界符来做到这一点:

INSERT INTO table1 VALUES(1);DELIMITER $$CREATE PROCEDURE procedure1()BEGIN  SET @s = 'SELECt SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';  PREPARE stmt2 FROM @s;  SET @a = 6;  SET @b = 8;  EXECUTE stmt2 USING @a, @b;END$$DELIMITER ;INSERT INTO table1 VALUES(2);

请注意,当您的触发器没有BEGIN … END子句时,可以省略定界符。


第2部分

如果没有定界符,则该语句将被解析为-

CREATE PROCEDURE procedure1()BEGIN  SET @s = 'SELECt SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

代替 -

CREATE PROCEDURE procedure1()BEGIN  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';  PREPARE stmt2 FROM @s;  SET @a = 6;  SET @b = 8;  EXECUTE stmt2 USING @a, @b;END


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号