SQL 命名法:INSERT/UPDATE/DELETE 的“查询”或“命令”?

Posted

技术标签:

【中文标题】SQL 命名法:INSERT/UPDATE/DELETE 的“查询”或“命令”?【英文标题】:SQL Nomenclature: "Query" or "Command" for INSERT/UPDATE/DELETE? 【发布时间】:2011-10-05 17:10:37 【问题描述】:

哪个更适合调用INSERT/UPDATE/DELETE 语句?命令还是查询?我会认为“命令”,因为“查询”意味着您正在提出问题并期望得到您的问题的回答(以及更多信息,而不仅仅是“是的,此操作已成功执行,并且可选地,这是您的插入 ID”) .

只是一位中级 Web 应用程序开发人员提出的问题,他也是通信专业并且喜欢特殊性。

【问题讨论】:

嗯,几乎我所有的 SQL 书籍都是红色的,上面写着INSERT/UPDATE/DELETE 命令 我需要为我的团队创建抽象类,以便使用实体框架实现工作单元、命令模式。我希望抽象类有一个模板 Execute 方法来处理 setup 和 saveChanges,所以命名很重要。我想出的东西:AbstractMutateCommand、AbstractUpdateCommand、AbstractWriteCommand。选择了最后一个。 我正在寻找相同的 - select/insert/update/delete 的术语,但 不是 用于过程调用。我想我会称之为“声明”。 【参考方案1】:

INSERTUPDATEDELETEMERGE 的通用术语是“更新”(尽管它可能令人困惑——而且并不理想——UPDATE 只是一个子集“更新”)。另一个术语是“关系赋值”。

SELECTINSERTUPDATEDELETEMERGE(以及以分号结尾的任何其他内容)的通用术语称为“语句”。

严格来说,“查询”是返回结果集的SELECT 语句(例如排除SELECT..INTO..FROM 语句)。然而,使用术语“查询”来指代更新,虽然是非正式的,但不幸的是非常普遍。例如,虽然“更新查询”是一个矛盾的说法,但当我使用该确切术语 (site:***.com "update query") 对该网站进行 Google 搜索时,我得到了 17,300 次点击!


更新(双关语:)

@David Marx:我不同意你的说法,即推荐 插入/删除/合并作为“更新”。那将是非常 令人困惑。只有 UPDATE 是更新。

我在最初的回答中同意这种情况可能令人困惑。我们很幸运 *** 能够格式化答案和 cmets,以便将关键字 UPDATE 与逻辑更新区分开来;以大写形式编写关键字(按照完全标准 SQL-92 的要求:)也有帮助。

但是,通过阅读一般数据库和计算科学文献,我可以告诉您,“更新”确实是正确的统称。我在下面提供了一个引用:

“An Introduction to Relational Database Theory”(2010 年),Hugh Darwen [可免费下载 pdf 文件 -- 谷歌搜索):

关系 DBMS 中预期的不同更新运算符是 通常称为INSERTDELETEUPDATE,这些是 教程 D 中使用的名称(也在 SQL 中)[p.28]

很遗憾UPDATE这个关键字变得如此广泛 被接受为仅用于更新的一个特定操作员的名称 数据库。请不要向信使开枪! [第168页]

虽然 [relational] 赋值在理论上足以满足 更新目的,通常使用速记更方便 表示目标当前值的差值 relvar 和新值。有时......这种差异只是 将一个或多个元组添加到现有集合中;有时是 只是改变了一些现有的一些属性值 元组;有时它只是删除一些现有的 元组。这三个特殊情况的速记已被提及 分别为INSERTUPDATEDELETE,从那时起 远古——换句话说,甚至在关系出现之前 数据库,当然在此之前 更新是文件,而不是 relvar 或 SQL 表 [p.165]

【讨论】:

我不同意您的说法,即将 INSERT/DELETE/MERGE 称为“更新”是恰当的。那将是非常混乱的。只有 UPDATE 是更新。 @David Marx:查看我的答案的更新。另外,考虑一下我的MERGE 是否属于MERGE..IF MATCHED THEN UPDATE.. 的种类,这是否可以被视为UPDATE 以及更新? ;)【参考方案2】:

如有疑问,请称其为“声明”。

【讨论】:

【参考方案3】:

有时除了 select 之外的任何东西都被认为是 DML - 数据操作语言。然而,这并不是一个硬性的区别。这与 DML 中经常包含 select 一样。

【讨论】:

以上是关于SQL 命名法:INSERT/UPDATE/DELETE 的“查询”或“命令”?的主要内容,如果未能解决你的问题,请参考以下文章

java:蛇形命名法格式(snake-case)字符串变量名转驼峰命名法格式(camel-case)

java:蛇形命名法格式(snake-case)字符串变量名转驼峰命名法格式(camel-case)

SQL Server 数据库规范

更新 Spring Data JPA 之数据表名的命名规则为驼峰命名法

mysl创建用户+授权+增删改查

帕斯卡命名法和骆驼命名法