函数、存储过程、触发器的SQL/PSM来源及DDL/DML分类问询
嘿,我来帮你把这些概念理得明明白白~
关于SQL/PSM与函数、存储过程、触发器的归属
一、谁提供了这些数据库对象?
首先明确:SQL/PSM是SQL的过程化扩展,用来弥补标准SQL缺乏逻辑控制(比如循环、分支)的不足,三者的归属可以这么看:
- 函数(Functions):标准SQL本身包含内置函数(比如
COUNT()、SUM()这类系统函数),但支持自定义逻辑、带过程化控制的用户自定义函数,是SQL/PSM扩展提供的。不同数据库(比如MySQL、PostgreSQL)的自定义函数实现,本质都是基于SQL/PSM的思路做的适配。 - 存储过程(Procedures):完全属于SQL/PSM的范畴,标准SQL没有存储过程的定义,它是过程化扩展带来的、可以封装复杂业务逻辑(循环、分支、多步操作)的可执行单元。
- 触发器(Triggers):标准SQL包含了触发器的基础定义,但如果触发器需要执行带有过程化逻辑的操作(比如触发后做条件判断、多步数据处理),就得依赖SQL/PSM。这里要纠正你一个小误区:触发器不属于存储过程,它是独立的数据库对象——触发器会在指定事件(比如
INSERT/UPDATE)发生时自动触发,不需要手动调用;而存储过程必须主动执行(比如CALL语句),这是两者的核心区别。
二、它们属于DDL还是DML?
这个得分场景来看:
- 创建、修改、删除这些对象的语句(比如
CREATE FUNCTION、ALTER PROCEDURE、DROP TRIGGER)属于DDL(数据定义语言),因为这些操作是在定义数据库的结构和对象本身。 - 调用存储过程、执行自定义函数的行为(比如
CALL my_procedure()、SELECT my_custom_func()),如果操作涉及数据的增删改查,那其中的具体逻辑可能包含DML,但对象本身的定义依然是DDL。 - 触发器本身的定义是DDL,但触发器触发后执行的逻辑里可以包含DML语句(比如
INSERT、UPDATE)。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

