You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数、存储过程、触发器的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:13:37